《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.3.全文搜索/精确搜索(9) https://developer.aliyun.com/article/1229932
4.2 match_bool_prefix
match_bool_prefix 查询会将被查询的内容根据分词器解析成词项进行单独的查询。除最后一个词外的每个词项都是用 term 查询。最后一个词项用于 prefix 查询。
比如下面这个查询:
GET my-index-000001/_search { "query": { "match_bool_prefix" : { "message" : "quick brown f" } } }
这里分词器会产生 "quick"、"brown"、"f" 三个词项,然后组成与下面效果一致的 bool 查询。
GET my-index-000001/_search { "query": { "bool" : { "should": [ { "term": { "message": "quick" }}, { "term": { "message": "brown" }}, { "prefix": { "message": "f"}} ] } } }
match_bool_prefix 在使用的时候有以下一些注意点:
1、analyzer 的设置对搜索词项的解析非常重要,最后一个词项的 prefix 查询是否符合需求和analyzer 很有关系。
2、match_bool_prefix 查询支持 match 查询中 minimum_should_match 和 operater 参数,这次参数会应用到解析的子查询中(bool 后的 term 查询)。在大多数情况下,构造的 bool 查询中的子句数量和被搜索短语解析出的词项数量一致。
3、fuzziness、prefix_length、max_expansions、fuzzy_transpositions 和 fuzzy_rewrite 参数可以应用到为除了最后一项之外的所有项构造的 term 子查询。它们对为最后一个词构造的 prefix 查询没有任何影响。
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.3.全文搜索/精确搜索(11) https://developer.aliyun.com/article/1229930