部分匹配 (三) -(match_phrase_prefix)查询期间的即时搜索

第一步:和match_phrase类似,区别在于第二步

GET /my_index/my_type/_search

{

"query": {

"match_phrase_prefix": {

"title": "The quick brown f"

}

}

}

 

部分匹配 (三) -(match_phrase_prefix)查询期间的即时搜索_第1张图片

 

 

 

第二步:

在第一步中,查询字符串中的最后一个单词总是会被当做一个前缀。

在之前介绍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)