Elasticsearch completion suggest解析
例如,“天上人间” 分析为:“天上人间”、“天上”、“上人”、“人间” 四个词条。 要注意这4个词条还有顺序,也就是position分别为0, 1, 2, 3。
FST实际上是前缀编码,这些词被顺序串联在一起进行编码,并记录了每个词条的相对位置,编码后形如:
天上人间|天上|上人|人间
0 1 2 3
特别注意,这时候所有的查找都只能从0位置的“天”开始。
做completion suggest的时候, 输入的词条经过分析后, 必须有相同的前缀和相对位址。 因为你的搜索用的simple analyzer,当输入"天"的时候, 分析出来的是"天" (0), 在FST里是从起始位置开始可以匹配到。其他输入“天上” “天上人” 都是从位置0开始的前缀,也都可以匹配。
但是如果你输入“上”, simple analyzer分析出来的是"上" (0), 去FST里查,第一个就不匹配,所以没结果。
为了帮助理解,针对你的例子,可以试一下如下的搜索:
POST test_suggestion/_search
{"suggest": {"term-suggestion": {"prefix": "天上人间 天上 上","completion": {"field": "keyword_suggestion"}}}
}
你会发现,上面用空格分隔的3个词,也可以match。 原因在于搜索用的simple analyzer是用空格一类的分隔符分词的,分词结果是
天上人间|天上|上
0 1 2
顺着FST走下去,可以做到前缀匹配。
总结来说,当使用completion suggester的时候, 不是用于完成 类似于 "*关键词*"这样的模糊匹配场景,而是用于完成关键词前缀匹配的。 对于汉字的处理,无需使用ik/ HanLP一类的分词器,直接使用keyword analyzer,配合去除一些不需要的stop word即可。
举个例子,做火车站站名的自动提示补全,你可能希望用户输入“上海” 或者 “虹桥” 都提示"上海虹桥火车站“ 。 如果想使用completion suggester来做,正确的方法是为"上海虹桥火车站“这个站名准备2个completion词条,分别是:
"上海虹桥火车站"
"虹桥火车站"
这样用户的输入不管是从“上海”开始还是“虹桥”开始,都可以得到"上海虹桥火车站"的提示。
文章来源:https://elasticsearch.cn/question/1869
Elasticsearch completion suggest解析相关推荐
- ElasticSearch的搜索建议功能suggest search(completion suggest)
出自 图灵学院 ElasticSearch课程, 我自己学完了,整理了一下,然后给老师说的话,记录了一下,发了个博客 概述 suggest search(completion suggest):就 ...
- ElasticSearch教程——基于completion suggest实现搜索提示
ElasticSearch汇总请查看:ElasticSearch教程--汇总篇 前言 completion suggest也叫自动完成,搜索推荐,搜索提示 ,一般多叫自动完成,即auto comple ...
- java实现sug,Elasticsearch搜索Suggest功能优化
搜索Suggest需要优化问题: 怎么优化Suggest词库,提升Suggest词准确率 怎么提高响应速度 suggest词库获取 冷启动可以从内容中提取热词数据来解决,或者人工设置 挖掘搜索日志: ...
- Elasticsearch的suggest联想提示查询实现
Elasticsearch的suggest联想提示查询实现 思路 先将关键字在completions 自动补全索引库中查询,获取建议的补全信息 如没有获取到补全信息,可能表示用户输入的关键词有拼写错误 ...
- ElasticSearch源码解析(五):排序(评分公式)
ElasticSearch源码解析(五):排序(评分公式) 转载自:http://blog.csdn.net/molong1208/article/details/50623948 一.目的 一个 ...
- 渣渣菜鸡的 ElasticSearch 源码解析 —— 启动流程(上)
关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/08/11/es-code02/ 前提 上篇文章写了 ElasticSearch 源码解析 -- ...
- es基于completion suggest实现搜索提示
在之前的某一篇中,我们使用了es的前缀搜索,获得了文档根据前缀进行匹配的效果,如下图所示, 下面说说在es中的另一种实现搜索提示的功能,基于completion suggest 进行实现,其在实际应用 ...
- 创新实训(46)——基于ElasticSearch的Completion Suggest实现搜索提示
前言 现在来重新建立索引,然后实现搜索提示. 建立索引并重新抽取数据 PUT /articles2 {"mappings" : {"doc" : {" ...
- elasticsearch高级功能系列之completion suggest
1.首先创建mapping,注意,在需要建议的field创建一个内部fields,suggest,类型是completion ,因为处理的是中文,所以加了ik中文分词器. {"mapping ...
最新文章
- python绘图设置标题出现乱码_解决python2 绘图title,xlabel,ylabel出现中文乱码的问题...
- 【python pandas excel操作】
- 网博士自助建站系统_自助建站:自助建站到底好还是不好?
- java辐射汉化_新研究:低强度环境辐射足以导致量子比特退相干
- ThinkPHP删除指定文件(物理删除) 点击链接可查看详情(对学习可有很大的帮助的...
- 当有多个设备online时,命令行窗口通过adb连接指定设备方法
- c# xml文件新增同级节点_C# xml文件的创建,修改和添加节点 。
- 合肥师范学院计算机组成原理实验,计算机组成原理实验教学探索
- android高仿ios控制中心,仿 iOS 11原生控制中心
- html仿网易云网站,GitHub - Hdoove/music-webapp: 仿网易云webapp
- 帅哥陈 Hololens开发笔记(1)
- Android代码心得6-Intent的使用
- Java Web实现用户注册页面的提交
- 原来路由器也属于消耗品
- Unity UGUI图文混排源码--优化版
- 沪深股票历史财报数据查询系统网络共享版
- Linux 批量无损压缩图片
- 1666_MIT 6.828 JOS隔离机制的大纲
- 【Oracle】计算百分比
- Pandas教程【国宝级教程,一万八千字总结】