match_phrase_prefix和match_phrase是相同的,除了它容许文本中最后一项使用前缀匹配。例如:
html
GET /_search { "query": { "match_phrase_prefix" : { "message" : "quick brown f" } } }
它接受和短语类型同样的参数。此外,它也接受max_expansions参数(默认50),它能够控制最后一个项有多少前缀能够扩展。它被强烈建议设置一个可接受的值,以控制查询的时间。例如:java
GET /_search { "query": { "match_phrase_prefix" : { "message" : { "query" : "quick brown f", "max_expansions" : 10 } } } }
重要:match_phrase_prefix
查询是a poor-man’s autocomplete。它很是容易使用,让你快速开始搜索即时类型,但它的结果,一般是足够好的,有时也会让产生疑惑。elasticsearch
考虑查询字符串 quick brown f。此查询经过从quick和brown建立短语查询而工做(即quick项必须存在而且紧跟着brown项)。而后它搜索以f开通按照字典项排序的前50个项而且把这些项加入到短语查询中。ide
问题是,可能前50项中可能没有包含fox,全部quick brown fox可能没有被找到,这一般都不是问题,用户能够持续输入更多的字符,直到他们搜索的词出现为止。ui
更好的搜索即时类型(search-as-you-type)解决方案请看completion suggester 和 Index-Time Search-as-you-type。code
原文地址:https://www.elastic.co/guide/en/elasticsearch/reference/5.0/query-dsl-match-query-phrase-prefix.htmlhtm