第一步:和match_phrase类似,区别在于第二步
GET /my_index/my_type/_search
{
"query": {
"match_phrase_prefix": {
"title": "The quick brown f"
}
}
}

第二步:
在第一步中,查询字符串中的最后一个单词总是会被当做一个前缀。
在之前介绍prefix查询的时候,我们谈到了prefix查询的一些需要注意的地方 - prefix查询时如何消耗资源的。在使用match_phrase_prefix查询的时候,也面临着同样的问题。一个前缀a你能够匹配非常非常多的词条。匹配这么多的词条不仅会消耗很多资源,同时对于用户而言也是没有多少用处的。
我们可以通过将参数max_expansions设置成一个合理的数值来限制前缀扩展(Prefix Expansion)的影响,比如50:
GET /my_index/my_type/_search
{
"query": {
"match_phrase_prefix": {
"title": {
"query": "The quick brown",
"max_expansions": 50
}
}
}
}
max_expansions参数会控制能够匹配该前缀的词条的数量。它会找到首个以bl开头的词条然后开始收集(以字母表顺序)直到所有以bl开头的词条都被遍历了或者得到了比max_expansions更多的词条。
不要忘了在用户每敲入一个字符的时候,该查询就要被执行一次,因此它的速度需要快。如果第一个结果集不符合用户的期望,那么他们就会继续输入直到得到他们需要的结果。
本文探讨了Elasticsearch中match_phrase_prefix查询的使用方法及其资源消耗问题。通过设置max_expansions参数,可以有效限制前缀扩展的影响,提高查询效率。

2251

被折叠的 条评论
为什么被折叠?



