匹配短语前缀查询

编辑

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

示例请求

编辑

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

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

问题在于,前 50 个词元可能不包括词元 fox,因此找不到短语 quick brown fox。这通常不是问题,因为用户将继续输入更多字母,直到他们正在查找的单词出现为止。

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