匹配短语前缀查询编辑

返回包含所提供文本中的词语的文档,这些词语的顺序与提供的顺序相同。所提供文本的最后一个词语被视为前缀,匹配以该词语开头的任何词语。

示例请求编辑

以下搜索返回在 message 字段中包含以 quick brown f 开头的短语的文档。

此搜索将匹配 message 值为 quick brown foxtwo 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。此查询的工作原理是:从 quickbrown 创建一个短语查询(即,必须存在词语 quick,并且后面必须跟着词语 brown)。然后,它查看排序后的词语字典,找到以 f 开头的第一个 50 个词语,并将这些词语添加到短语查询中。

问题是,前 50 个词语可能不包含词语 fox,因此将找不到短语 quick brown fox。这通常不是问题,因为用户会继续键入更多字母,直到出现他们要查找的词语。

有关边输入边搜索的更好解决方案,请参阅自动完成建议器search_as_you_type 字段类型