读《深入理解Elasticsearch》点滴-改正用户拼写错误
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》点滴-改正用户拼写错误的更多相关文章
- 深入理解ElasticSearch(PDF版 内含目录)
深入理解ElasticSearch 介绍: 本书涵盖了Elasticsearch的许多中高级功能,并介绍了缓存.ApacheLucene库以及监控等模块的内部运作机制.其中,还涉及一些实用案例,比如配 ...
- mysql系列:加深对脏读、脏写、可重复读、幻读的理解
关于相关术语的专业解释,请自行百度了解,本文皆本人自己结合参考书和自己的理解所做的阐述,如有不严谨之处,还请多多指教. 事务有四种基本特性,叫ACID,它们分别是: Atomicity-原子性,Con ...
- 《深入理解Elasticsearch》README
书目 <深入理解ElasticSearch>拉斐尔·酷奇,马雷克·罗戈任斯基[著]张世武,余洪森,商旦[译] 机械工业出版社,2016.1 本系列包括以下8篇笔记 第01章 Elastic ...
- 读《深入理解Elasticsearch》点滴-Elastic HQ监控工具
1.多节点监控 2.类似war功能部署,tomcat即可使用 3.免费 4.ElasticHQ supports all major version of Elasticsearch from ver ...
- 读《深入理解Elasticsearch》点滴-聚合-top_hits
以下是官网手册(部分)(v5.1) 直接直接看官网手册 https://www.elastic.co/guide/en/elasticsearch/reference/5.1/search-aggre ...
- 读《深入理解Elasticsearch》点滴-查询二次评分
理解二次评分 二次评分是指重新计算查询返回文档中指定个数文档的得分,es会截取查询返回的前N个,并使用预定义的二次评分方法来重新计算他们的得分 小结 有时候,我们需要显示查询结果,并且使得页面上靠前文 ...
- 读《深入理解Elasticsearch》点滴-查询模版(结合官网手册,版本5.1)
1.为什么使用查询模版 让应用程序开发者只需要把查询传递给elasticsearch,而不需要考虑查询语句的构造.查询DSL语法.查询结果过滤等细节知识. 2.使用版本5.1,查询模版在5.6中发生变 ...
- 读《深入理解Elasticsearch》点滴-查询评分
计算文档得分的因子: 文档权重(document boost):索引期赋予某个文档的权重值 字段权重(field boost):查询期赋予某个文档的权重值 协调因子(coord):基于文档中词项个数的 ...
- 读《深入理解Elasticsearch》点滴-基础概念
Lucene的概念 document:以json的形式体现,搜索和搜索的主要载体 field:document的一个部分 term(词项):代表文本中的一个词 token(词条):term在field ...
随机推荐
- Ion内存的带cahce与不带cache问题分享
一次开发中,遇到一个问题:YUV图像(由本地磁盘文件读到ION内存中)缩放时,对于缩放模块的输入源来说,使用带cache的方式要比不带cache的方式速度快数10倍. 为什么会出现这个情况呢? 在解释 ...
- 微擎 人人商城 导出excel表分析
在 数据处理上 ,有很多时候需要导出excel表 来当报表, 等 , php 人人商城导出报表过程简单分析 在导出时候发现 ca('statistics.order.export'); 出于好奇 ...
- Gym 100956 A Random Points on the Circle
二分答案. 对于每次二分后的答案来说, 先倍增序列,通过 two point 来找到 以每个点为起点的最优的符合答案的在哪里. 然后可以DFS树去判断他的前k祖先之间的距离是不是大于k. 常数有点大. ...
- hdu5491 The Next 模拟
Let LL denote the number of 1s in integer DD’s binary representation. Given two integers S1S1 and S2 ...
- 树形dp poj2342 Anniversary party * 求最大价值
Description There is going to be a party to celebrate the 80-th Anniversary of the Ural State Univer ...
- WebGL2系列之采样器对象
前言 在WebGL1中,纹理的图片和采样信息都是写在纹理对象之中. 采样信息告诉GPU如何去读取贴图上图片的信息. 如果我们希望从同一个图片多次读取像素信息,但是每次读取的时候使用的过滤方式不一样, ...
- NOIP2002[提高组] 均分纸牌 题解
题面 题目保证有解即纸牌总数能被人数整除(N|T)每个人持有纸牌a[1]...a[m],我们可以先考虑第一个人 1.若a[1]>T/M,则第一个人需要给第二个人c[1]-T/M张纸牌,即把c[2 ...
- VScode神器如何同步配置和所装插件
由于近期编辑器换用vscode,回到家里也需要写代码,但是家里电脑也需要安装vscode,并设置相同配置和插件.想到以前webstrom可以直接导出配置然后安装. 但是vscode无此配置,突发奇想g ...
- 【Offer】[13] 【机器人的运动范围】
题目描述 思路分析 Java代码 代码链接 题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和 ...
- SQL,如果碰到Json,你会怎么做?
1.Json串如下: DECLARE @JsonInfo NVARCHAR() SET @JsonInfo=N' { "CalcPayInput":{ ", " ...