匹配短语前缀查询
编辑匹配短语前缀查询编辑
返回包含所提供文本中的词语的文档,这些词语的顺序与提供的顺序相同。所提供文本的最后一个词语被视为前缀,匹配以该词语开头的任何词语。
示例请求编辑
以下搜索返回在 message
字段中包含以 quick brown f
开头的短语的文档。
此搜索将匹配 message
值为 quick brown fox
或 two quick brown ferrets
的文档,但不会匹配 the fox is quick and brown
。
response = client.search( body: { query: { match_phrase_prefix: { message: { query: 'quick brown f' } } } } ) puts response
GET /_search { "query": { "match_phrase_prefix": { "message": { "query": "quick brown f" } } } }
match_phrase_prefix
的顶级参数编辑
-
<field>
- (必填,对象)要搜索的字段。
<field>
的参数编辑
-
query
-
(必填,字符串)要在提供的
<field>
中查找的文本。match_phrase_prefix
查询在执行搜索之前,会将任何提供的文本分析为标记。此文本的最后一个词语被视为前缀,匹配以该词语开头的任何词语。 -
analyzer
- (可选,字符串)用于将
query
值中的文本转换为标记的分析器。默认为为<field>
映射的索引时分析器。如果没有映射分析器,则使用索引的默认分析器。 -
max_expansions
- (可选,整数)
query
值的最后一个词语将扩展到的最大词语数。默认为50
。 -
slop
- (可选,整数)匹配标记之间允许的最大位置数。默认为
0
。转置词语的 slop 为2
。 -
zero_terms_query
-
(可选,字符串)指示如果
analyzer
删除了所有标记(例如,使用stop
过滤器时),是否不返回任何文档。有效值为:-
none
(默认) - 如果
analyzer
删除了所有标记,则不返回任何文档。 -
all
- 返回所有文档,类似于
match_all
查询。
-
注意编辑
使用匹配短语前缀查询进行搜索自动完成编辑
虽然 match_phrase_prefix
查询易于设置,但将其用于搜索自动完成有时可能会产生令人困惑的结果。
例如,考虑查询字符串 quick brown f
。此查询的工作原理是:从 quick
和 brown
创建一个短语查询(即,必须存在词语 quick
,并且后面必须跟着词语 brown
)。然后,它查看排序后的词语字典,找到以 f
开头的第一个 50 个词语,并将这些词语添加到短语查询中。
问题是,前 50 个词语可能不包含词语 fox
,因此将找不到短语 quick brown fox
。这通常不是问题,因为用户会继续键入更多字母,直到出现他们要查找的词语。
有关边输入边搜索的更好解决方案,请参阅自动完成建议器和search_as_you_type
字段类型。