> 文章列表 > Term Suggester 中 suggest_mode 的三种模式missing、popular、always 的区别

Term Suggester 中 suggest_mode 的三种模式missing、popular、always 的区别

Term Suggester 中 suggest_mode 的三种模式missing、popular、always 的区别

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 和文档频率没有任何关系

Term Suggester 中 suggest_mode 的三种模式missing、popular、always 的区别

2.2 popular

popular:仅返回与搜索词文档词频或文档词频更高的建议词

此时推荐词不会管你是不是被搜索词命中,但是推荐结果会被以下两个参数影响:

min_doc_freq:即文档频率阈值,只返回文档频域大于设定值的推荐词。在推荐词中,只返回 freq 值大于等于该参数设定值的推荐词
max_term_freq: 即词频阈值,只有词频数量小于设定值的词项,才会有推荐词。这个参数缺省值为 1,因为官网文档中未做说明,再者 term suggester 本身不是重点,所以在视频里没有提到。
注意以上两个参数,一个是词频,一个是文档频率。一个是最小阈值,一个是最大阈值。如下图例子
Term Suggester 中 suggest_mode 的三种模式missing、popular、always 的区别

2.3 always

always:根据 建议文本中的词项 推荐 任何匹配的建议词

这个就是不做任何限制