1、使用“建议”的方法:在query body的json结构体中,增加suggest节点;或者使用特殊的REST端点

2、es自带有多个不同的suggest实现,用来纠正用户的拼写错误及创建自动补全等功能

3、如果索引中文档较少,则可能找不到合适建议的结果

4、有三种那个suggester:term suggester,phrase suggester,complete suggester(自动完成)

5、使用suggest REST端点

POST 'localhost:9200/myindex/_suggest?pretty'
{
"first_suggestion":{
"test":"world war ii",
"term":{
"field":"_all"
}
},
"second_suggestion":{
"text":"raceing",
"term":{
"field":"text"
}
}
}

查询后将返回建议列表

6、在查询请求中包含建议请求

POST ‘localhost:/myindex/_search?pretty'
{
"query":{
"match_all":{}
},
"suggest":{
"first_suggestion":{
"text":"wordl war ii",
"term":{
"field":"_all"
}
},
  "second_suggestion":{
    "text":"wordl war ii",
    "term":{
     "field":"_all"
    }
   }
}
}

查询结果包括了“查询结果、建议结果”
7、事实上,term suggester 基于编辑距离来运作。这意味着,加一次通过增删改某些字符转化为原词所改动的字符数越少,它越有可能是最佳选择。距离worl转化为work,改动了一个字符,因此编辑距离为1.当然,suggester的text文本需要先经过分词转化为词项。对原始输入句子的每个词都给出建议列表。

8、term suggester的通用配置选项

  • text:原始输入,有错误的问题
  • field:制定产生建议的字段
  • analyzer:
  • size:每个词项的最大建议词数量,默认5
  • sort:
  • suggest_mode:可用3个“missing、popular、always”。默认值missing,要求es对text参数的词项做一个区分对待,如果该词项不存在于索引中,则返回建议词,否则,不返回;如果取值为“popu lar”,则es在生成建议词做一个判断,如果建议词比原词更受欢迎,则返回,否则不返回。如果取值为“always”,指为每个text中的每个词生成建议词。
  • 其他配置参数

9、phrase suggester:基于n-gram方法将索引中词项切分成gram。举例,如果将单词“mastering”采用bi-bigrams方法切分,则切分结果为:ma as st te er ri in ng

10、phrase suggester支持高亮配置

11、completion suggester 自动完成:es设计者们决定在索引过程中创建类似FST的数据结构,并把它存储在索引中,需要的时候可以加载进内存

12、为了使用使用基于前缀的suggester,我们需要在定义mappings时,某个字段使用“completion”类型的字段来索引数据。

13、如果使用自动完成功能,其类型是强制提供的,必须是complete。

14、请记住payload必须是一个json对象,{"books":["1234","3243"]}

读《深入理解Elasticsearch》点滴-改正用户拼写错误的更多相关文章

  1. 深入理解ElasticSearch(PDF版 内含目录)

    深入理解ElasticSearch 介绍: 本书涵盖了Elasticsearch的许多中高级功能,并介绍了缓存.ApacheLucene库以及监控等模块的内部运作机制.其中,还涉及一些实用案例,比如配 ...

  2. mysql系列:加深对脏读、脏写、可重复读、幻读的理解

    关于相关术语的专业解释,请自行百度了解,本文皆本人自己结合参考书和自己的理解所做的阐述,如有不严谨之处,还请多多指教. 事务有四种基本特性,叫ACID,它们分别是: Atomicity-原子性,Con ...

  3. 《深入理解Elasticsearch》README

    书目 <深入理解ElasticSearch>拉斐尔·酷奇,马雷克·罗戈任斯基[著]张世武,余洪森,商旦[译] 机械工业出版社,2016.1 本系列包括以下8篇笔记 第01章 Elastic ...

  4. 读《深入理解Elasticsearch》点滴-Elastic HQ监控工具

    1.多节点监控 2.类似war功能部署,tomcat即可使用 3.免费 4.ElasticHQ supports all major version of Elasticsearch from ver ...

  5. 读《深入理解Elasticsearch》点滴-聚合-top_hits

    以下是官网手册(部分)(v5.1) 直接直接看官网手册 https://www.elastic.co/guide/en/elasticsearch/reference/5.1/search-aggre ...

  6. 读《深入理解Elasticsearch》点滴-查询二次评分

    理解二次评分 二次评分是指重新计算查询返回文档中指定个数文档的得分,es会截取查询返回的前N个,并使用预定义的二次评分方法来重新计算他们的得分 小结 有时候,我们需要显示查询结果,并且使得页面上靠前文 ...

  7. 读《深入理解Elasticsearch》点滴-查询模版(结合官网手册,版本5.1)

    1.为什么使用查询模版 让应用程序开发者只需要把查询传递给elasticsearch,而不需要考虑查询语句的构造.查询DSL语法.查询结果过滤等细节知识. 2.使用版本5.1,查询模版在5.6中发生变 ...

  8. 读《深入理解Elasticsearch》点滴-查询评分

    计算文档得分的因子: 文档权重(document boost):索引期赋予某个文档的权重值 字段权重(field boost):查询期赋予某个文档的权重值 协调因子(coord):基于文档中词项个数的 ...

  9. 读《深入理解Elasticsearch》点滴-基础概念

    Lucene的概念 document:以json的形式体现,搜索和搜索的主要载体 field:document的一个部分 term(词项):代表文本中的一个词 token(词条):term在field ...

随机推荐

  1. Linux下各目录及其作用

    目录及其作用 /:根目录,一般根目录下只存放目录,不要存放件,/etc./bin./dev./lib./sbin应该和根目录放置在一个分区中 /bin: /usr/bin: 可执行二进制文件的目录,如 ...

  2. 第一个Javaweb应用程序

    第一个Javaweb应用程序 一.Javaweb应用程序结构 一个 web 应用程序是由一组 Servlet,HTML 页面,类,以及其它的资源组成的运行在 web 服务器上的完整的应用程序,以一种结 ...

  3. CopyOnWriteArrayList笔记

    CopyOnWriteArrayList笔记 一.前言 Java 5.0 在java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能. ConcurrentHashMap ...

  4. Python机器学习笔记:不得不了解的机器学习知识点(2)

    之前一篇笔记: Python机器学习笔记:不得不了解的机器学习知识点(1) 1,什么样的资料集不适合用深度学习? 数据集太小,数据样本不足时,深度学习相对其它机器学习算法,没有明显优势. 数据集没有局 ...

  5. 噩梦(双向BFS)

    给定一张N*M的地图,地图中有1个男孩,1个女孩和2个鬼. 字符“.”表示道路,字符“X”表示墙,字符“M”表示男孩的位置,字符“G”表示女孩的位置,字符“Z”表示鬼的位置. 男孩每秒可以移动3个单位 ...

  6. LuoGu-P1122 最大子树和+树形dp入门

    传送门 题意:在一个树上,每个加点都有一个值,求最大的子树和. 思路:据说是树形dp入门. 用dfs,跑一边,回溯的时候求和,若和为负数,则减掉,下次不记录这个节点. #include <ios ...

  7. hdu 6092 Rikka with Subset(多重背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6092 #include <cstdio> #include <iostream> ...

  8. C++多例模式下对Instance的使用

    最近工作中遇到这样一个问题: 之前N年,公司用的都是一块CPU对应一块物理板,也就是,一块物理板只要一个实例化就可以了----俗称单例模式. 现在突然要一块CPU对应多块物理板,妥妥的多例模式啊.但是 ...

  9. "ANDROID" 支持的KEYCODE

      例子: adb shell input text keyevent 4 0 -->  "KEYCODE_UNKNOWN" 1 -->  "KEYCODE_ ...

  10. stm32f10x基于freeRTOS的低功耗实现

    0. 写在前面 没有太多时间更新,可能偶尔有时间就更新一些. 因为突然有项目用到了stm32f10x系列并且是电池驱动的,所以需要对功耗进行优化,其他CM3核心系列应该也同样适用. 1. 背景 Stm ...