本地英文版地址: ../en/query-dsl-match-query-phrase-prefix.html
短语前缀匹配(match_phrase_prefix)查询edit
返回包含所提供文本中的单词的文档,这些单词在文档中的出现顺序与所提供的文本相同。 所提供文本的最后一个词项被视为 prefix(前缀),匹配以该单词开头的任何词项。
以下搜索将返回 message
字段中包含以 quick brown f
开头的短语的文档。
这个搜索将匹配字段 message
的值为 quick brown fox
或 two quick brown ferrets
的,但是不会匹配 the fox is quick and brown
。
GET /_search { "query": { "match_phrase_prefix" : { "message" : { "query" : "quick brown f" } } } }
-
query
-
(必需的, string) 您希望在提供的
<field>
中查找的文本。在执行搜索之前,
match_phrase_prefix
查询会将任何提供的文本analyze(分析) 为 词元(token)。 该文本的最后一个词项被视为prefix(前缀),匹配以该词项开头的任何单词。 -
analyzer
-
(可选, string)
analyzer(分析器) 用来将
query
中的文本转换为 词元(token)。 默认为映射到<field>
的 索引时使用的分析器(index-time analyzer)。 如果没有映射分析器,则使用索引的默认分析器。 -
max_expansions
-
(可选, integer)
query
值的最后一个提供的词项将扩展到的最大词项数。默认值为50
。 -
slop
-
(可选, integer) 匹配词元(token)之间允许的最大位置数。默认为
0
。颠倒顺序的词项的 slop 为2
。 -
zero_terms_query
-
(可选, string) 指示如果
analyzer
删除所有 词元(token) (例如使用stop
过滤器时),是否不返回任何文档。有效值有:-
none
(默认值) -
如果
analyzer
删除所有 词元(token),则不返回任何文档。 -
all
-
返回所有文档, 与
match_all
查询类似。
-
虽然很容易设置,但使用 match_phrase_prefix
查询进行搜索自动完成有时会产生令人困惑的结果。
例如,考虑查询字符串 quick brown f
。
这个查询的工作原理是用 quick
和 brown
创建一个短语查询(也就是说,词项 quick
必须存在,并且后面必须跟有词项 brown
)。
然后,它查看已排序的词项字典,查找以 f
开头的前50个词项语,并将这些词项添加到短语查询中。
问题是,前50个词项可能不包括词项 fox
,因此将找不到短语 quick brown fox
。
这通常不是问题,因为用户会继续输入更多的字母,直到他们要找的单词出现。
有关输入即搜索(search-as-you-type)的更好解决方案,请参阅 完成建议(completion suggester) 和 search_as_you_type
字段类型。