短语前缀匹配(match_phrase_prefix)查询edit

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

请求示例

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

这个搜索将匹配字段 message 的值为 quick brown foxtwo quick brown ferrets 的,但是不会匹配 the fox is quick and brown

GET /_search
{
    "query": {
        "match_phrase_prefix" : {
            "message" : {
                "query" : "quick brown f"
            }
        }
    }
}

match_phrase_prefix的顶级参数

<field>
(必需的, object) 你想搜索的字段。

<field>的参数

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 查询类似。

注意

使用匹配短语前缀查询进行搜索自动完成(search autocompletion)

虽然很容易设置,但使用 match_phrase_prefix 查询进行搜索自动完成有时会产生令人困惑的结果。

例如,考虑查询字符串 quick brown f。 这个查询的工作原理是用 quickbrown 创建一个短语查询(也就是说,词项 quick 必须存在,并且后面必须跟有词项 brown)。 然后,它查看已排序的词项字典,查找以 f 开头的前50个词项语,并将这些词项添加到短语查询中。

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

有关输入即搜索(search-as-you-type)的更好解决方案,请参阅 完成建议(completion suggester)search_as_you_type 字段类型