ES基于completionsuggest实现搜索提示

分类: 数据库es |
转:https://www.codenong.com/cs106255517/
- Term Suggester,基于编辑距离,对analyze过的单个term去提供建议,并不会考虑多个term/词组之间的关系。quert -> query
- Phrase Suggester,在Term Suggester的基础上,通过ngram以词组为单位返回建议。noble prize -> nobel prize
- Completion Suggester,FST数据结构,类似Trie树,不用打开倒排,快速返回,前缀匹配
- Context Suggester,在Completion Suggester的基础上,用于filter和boost
下面说说在es中的种实现搜索提示的功能,基于completion suggest 进行实现,其在实际应用中搜索性能更加高效。
假如文档库里有一堆关于大话西游的,比如,“大话西游电影”,“大话西游小说”,"大话西游舞台剧"等,这里我们需要搜索以"大话西游"开头的文档。
1、自定义index,及字段分词属性,这里用IK中文分词器:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
PUT /news_website
{ } |
2、completion,es实现的时候,是非常高性能的,会构建不是倒排索引,也不是正拍索引,就是纯的用于进行前缀搜索的一种特殊的数据结构,而且会全部放在内存中,所以auto completion进行的前缀搜索提示,性能是非常高的,向索引插入几条数据:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
PUT /news_website/news/1
{ } PUT /news_website/news/2 { } PUT /news_website/news/3 { } PUT /news_website/news/4 { } |
1
2 3 4 5 6 7 8 9 10 11 |
GET /news_website/news/_search
{ |