什么是搜索建议
现代搜索引擎中都会提供搜索建议的功能,帮助用户在输入搜索的过程中,进行自动补全或纠错。协助用户输入更加精确的词,提高后续搜索文档的匹配程度。
在elastic中通过suggester api来实现
将输入的文本分解成token,然后在索引的词典里查找相似的term并返回。
根据不同场景,elastic设计了4中不同的suggesters
1.Term & Phrase Suggester
2.Complete & Context Suggester
一、term suggester
suggester是一种特殊类型的搜索,text里是搜索的文本,用户搜索lucen是一个错误的拼写,不存在的,到字段body上搜索,当无法搜索到结果时(missing),返回建议的词。
几种suggest model
1.missing 如果搜索索引中存在,就不提供建议
2.popular 推荐出现频率更高的词
3.always 无论是否存在都提供建议
演示案例:
使用missing
lucen 这个词拼写错误,索引里没有,就给出了推荐lucene,然而rock没有给出推荐,是因为索引里面有值。
使用popular
推荐了lucen 和 rocks两个词,rocks在索引里出现的频率更高,所以推荐了rocks这个词。
使用always
我们可以通过配置一系列的选项,来均衡灵活和性能:
- max_edits:最大编辑距离候选建议可以具有以便被视为建议。只能是介于1和2之间的值。任何其他值都会导致抛出错误的请求错误。默认为2。
- prefix_length:必须匹配的最小前缀字符的数量才是候选建议。默认为1.增加此数字可提高拼写检查性能。
- min_doc_freq:建议应出现的文档数量的最小阈值。可以指定为绝对数字或文档数量的相对百分比。这可以仅通过建议高频项来提高质量。默认为0f且未启用。如果指定的值大于1,则该数字不能是小数。分片级文档频率用于此选项。
- max_term_freq:建议文本令牌可以存在的文档数量的最大阈值,以便包括在内。可以是表示文档频率的相对百分比数(例如0.4)或绝对数。如果指定的值大于1,则不能指定小数。默认为0.01f。这可用于排除高频术语的拼写检查。高频术语通常拼写正确,这也提高了拼写检查的性能。分片级文档频率用于此选项。
小结,term suggester首先将输入文本经过分析器(所以,分析结果由于采用的分析器不同而有所不同)分析,处理为单个词条,然后根据单个词条去提供建议,并不会考虑多个词条之间的关系。然后将每个词条的建议结果(有或没有)封装到options列表中。最后由建议器统一返回。
二、Phrase Suggester
在text suggester基础上增加了一些逻辑和一些参数。
三、Complete Suggester (自动补全)
搜索elk,然后下面给自动补全推荐结果。
四、Context Suggester (基于上下文的提示)
四中类型使用总结