查询建议是什么?
查询建议,为用户提供良好的使用体验。主要包括: 拼写检查; 自动建议查询词(自动补全)
拼写检查如图:
自动建议查询词(自动补全):
搜索建议
通过Suggester Api实现
原理是将输入的文本分解为Token,然后在词典中查找类似的Term返回
根据不同场景,ElasticSearch设计了4中类别的Suggesters。
- Term Suggester
- Phrase Suggester
- Complete Suggester
- Context Suggester
Term Suggester
term 词项建议器,对给入的文本进行分词,为每个词进行模糊查询提供词项建议。对于在索引中存在词默认不提供建议词,不存在的词则根据模糊查询结果进行排序后取一定数量的建议词。
类似Google搜索引擎,我给的是一个错误的单词elasticserch,但引擎友好地给出了搜索建议。
要实现这个功能,在ElasticSearch中很简单。
创建索引,并写入一些文档
搜索文档,调用suggest api。有3种Suggestion Mode
针对自动补全场景而设计的建议器。此场景下用户每输入一个字符的时候,就需要即时发送一次查询请求到后端查找匹配项,在用户输入速度较高的情况下对后端响应速度要求比较苛刻。因此实现上它和前面两个Suggester采用了不同的数据结构,索引并非通过倒排来完成,而是将analyze过的数据编码成FST和索引一起存放。对于一个open状态的索引,FST会被ES整个装载到内存里的,进行前缀查找速度极快。但是FST只能用于前缀查找,这也是Completion Suggester的局限所在。
类似百度这样的提示功能
在ElasticSearch要实现这样的功能也很简单。
1. 建立索引
2. 写入文档
3. 搜索数据
3. 返回结果
是Completion Suggester的扩展,加入了上下文信息场景。
例如:
你在电器商城,输入苹果,想要找到的苹果笔记本...
你在水果商城,输入苹果,想要找的是红苹果、绿苹果...
1. 建立索引,定制mapping
2. 并为每个文档加入Context信息
3. 结合Context进行Suggestion查询
4. 返回结果