匹配短语前缀查询
编辑匹配短语前缀查询
编辑返回文档,这些文档包含提供的文本中的单词,并且顺序与提供的顺序相同。提供的文本的最后一个词被视为前缀,匹配任何以该词开头的单词。
示例请求
编辑以下搜索返回在 message
字段中包含以 quick brown f
开头的短语的文档。
此搜索将匹配 message
值为 quick brown fox
或 two quick brown ferrets
的文档,但不匹配 the fox is quick and brown
的文档。
resp = client.search( query={ "match_phrase_prefix": { "message": { "query": "quick brown f" } } }, ) print(resp)
response = client.search( body: { query: { match_phrase_prefix: { message: { query: 'quick brown f' } } } } ) puts response
const response = await client.search({ query: { match_phrase_prefix: { message: { query: "quick brown f", }, }, }, }); console.log(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
)。然后,它查看排序后的词元字典,以查找前 50 个以 f
开头的词元,并将这些词元添加到短语查询中。
问题在于,前 50 个词元可能不包括词元 fox
,因此找不到短语 quick brown fox
。这通常不是问题,因为用户将继续输入更多字母,直到他们正在查找的单词出现为止。
有关*搜索时输入*的更好解决方案,请参阅完成建议器和search_as_you_type
字段类型。