例如,“天上人间” 分析为:“天上人间”、“天上”、“上人”、“人间” 四个词条。 要注意这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解析相关推荐

  1. ElasticSearch的搜索建议功能suggest search(completion suggest)

    出自 图灵学院 ElasticSearch课程, 我自己学完了,整理了一下,然后给老师说的话,记录了一下,发了个博客 ​ 概述 suggest search(completion suggest):就 ...

  2. ElasticSearch教程——基于completion suggest实现搜索提示

    ElasticSearch汇总请查看:ElasticSearch教程--汇总篇 前言 completion suggest也叫自动完成,搜索推荐,搜索提示 ,一般多叫自动完成,即auto comple ...

  3. java实现sug,Elasticsearch搜索Suggest功能优化

    搜索Suggest需要优化问题: 怎么优化Suggest词库,提升Suggest词准确率 怎么提高响应速度 suggest词库获取 冷启动可以从内容中提取热词数据来解决,或者人工设置 挖掘搜索日志: ...

  4. Elasticsearch的suggest联想提示查询实现

    Elasticsearch的suggest联想提示查询实现 思路 先将关键字在completions 自动补全索引库中查询,获取建议的补全信息 如没有获取到补全信息,可能表示用户输入的关键词有拼写错误 ...

  5. ElasticSearch源码解析(五):排序(评分公式)

    ElasticSearch源码解析(五):排序(评分公式) 转载自:http://blog.csdn.net/molong1208/article/details/50623948   一.目的 一个 ...

  6. 渣渣菜鸡的 ElasticSearch 源码解析 —— 启动流程(上)

    关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/08/11/es-code02/ 前提 上篇文章写了 ElasticSearch 源码解析 -- ...

  7. es基于completion suggest实现搜索提示

    在之前的某一篇中,我们使用了es的前缀搜索,获得了文档根据前缀进行匹配的效果,如下图所示, 下面说说在es中的另一种实现搜索提示的功能,基于completion suggest 进行实现,其在实际应用 ...

  8. 创新实训(46)——基于ElasticSearch的Completion Suggest实现搜索提示

    前言 现在来重新建立索引,然后实现搜索提示. 建立索引并重新抽取数据 PUT /articles2 {"mappings" : {"doc" : {" ...

  9. elasticsearch高级功能系列之completion suggest

    1.首先创建mapping,注意,在需要建议的field创建一个内部fields,suggest,类型是completion ,因为处理的是中文,所以加了ik中文分词器. {"mapping ...

最新文章

  1. python绘图设置标题出现乱码_解决python2 绘图title,xlabel,ylabel出现中文乱码的问题...
  2. 【python pandas excel操作】
  3. 网博士自助建站系统_自助建站:自助建站到底好还是不好?
  4. java辐射汉化_新研究:低强度环境辐射足以导致量子比特退相干
  5. ThinkPHP删除指定文件(物理删除) 点击链接可查看详情(对学习可有很大的帮助的...
  6. 当有多个设备online时,命令行窗口通过adb连接指定设备方法
  7. c# xml文件新增同级节点_C# xml文件的创建,修改和添加节点 。
  8. 合肥师范学院计算机组成原理实验,计算机组成原理实验教学探索
  9. android高仿ios控制中心,仿 iOS 11原生控制中心
  10. html仿网易云网站,GitHub - Hdoove/music-webapp: 仿网易云webapp
  11. 帅哥陈 Hololens开发笔记(1)
  12. Android代码心得6-Intent的使用
  13. Java Web实现用户注册页面的提交
  14. 原来路由器也属于消耗品
  15. Unity UGUI图文混排源码--优化版
  16. 沪深股票历史财报数据查询系统网络共享版
  17. Linux 批量无损压缩图片
  18. 1666_MIT 6.828 JOS隔离机制的大纲
  19. 【Oracle】计算百分比
  20. Pandas教程【国宝级教程,一万八千字总结】

热门文章

  1. MySQL消费两次会员以及两次消费时间间隔
  2. H3CSE园区-链路聚合
  3. 扩容刚烧录至sd卡的linux系统
  4. USB工作学习笔记(一)
  5. 快速入门Maxwell基本操作流程(3D部分)
  6. GIS数据建库基本思想(下)
  7. 支付宝微信推出高速收费新服务器,微信、支付宝启动高速收费无感支付
  8. 基于javaweb+SSM校园快递物流管理系统
  9. 德语c1语言证书,学习德语要考哪些证书?欧那给你扒一扒德语的有哪些考证
  10. 回收站清空后如何恢复,三秒就学会