1、Term Suggester
term suggester 正如其名,只基于 tokenizer 之后的单个 term 去匹配建议词,并不会考虑多个term之间的关系
POST <index>/_search { "suggest": { "<suggest_name>": { "text": "<search_content>", "term": { "suggest_mode": "<suggest_mode>", "field": "<field_name>" } } } }
suggest_mode:搜索推荐的推荐模式,参数值亦是枚举:
- missing:默认值,仅为不在索引中的词项生成建议词
- popular:仅返回与搜索词文档词频或文档词频更高的建议词
- always:根据 建议文本中的词项 推荐 任何匹配的建议词
2、suggest_mode 详细解释
2.1 missing
missing:suggest_mode 的默认值,仅为不在索引中的词项生成建议词
如过参数值为 missing,那么此时如过搜索词命中了任何一个索引,都不会产生任何推荐词,只有当未命中任何索引的时候,才会产生推荐词,比如下图例子中。
搜索词中包含两个词项:baoqing 和 baoqiang 其中第一个词项没有命中任何索引,即在源数据中,没有任何词项和其匹配。所以会产生推荐词。这也是仅为不在索引中的词项生成建议词的含义。而第二个词项 baoqiang 是命中了索引的,即源数据中有某个词项被命中了,因此不产生任何推荐。missing 和文档频率没有任何关系
2.2 popular
popular:仅返回与搜索词文档词频或文档词频更高的建议词
此时推荐词不会管你是不是被搜索词命中,但是推荐结果会被以下两个参数影响:
min_doc_freq:即文档频率阈值,只返回文档频域大于设定值的推荐词。在推荐词中,只返回 freq 值大于等于该参数设定值的推荐词
max_term_freq: 即词频阈值,只有词频数量小于设定值的词项,才会有推荐词。这个参数缺省值为 1,因为官网文档中未做说明,再者 term suggester 本身不是重点,所以在视频里没有提到。
注意以上两个参数,一个是词频,一个是文档频率。一个是最小阈值,一个是最大阈值。如下图例子
2.3 always
always:根据 建议文本中的词项 推荐 任何匹配的建议词
这个就是不做任何限制