要不要再翻翻文档呢?

minimum_should_match 能够减少单字段 match 查询的响应时间吗?

Elasticsearch | 作者 hapjin | 发布于2019年04月26日 | 阅读数:3702

两个一样的match查询,只是一个指定了 minimum_should_match 参数为75%,另一个不指定minimum_should_match 。前者的搜索响应时间(took)应该都会比后者要小吧?【当查询字符串一样时,ES查询后会缓存数据,所以不太好对比】
 
我的理解是:用profile 查询分析,在 term query阶段 所花的时间应该一样,但是 minimum_should_match 使得匹配的文档数量少了,既然数量少了 那么 在rewrite、collector花的时间就少了吧?毕竟要处理的文档数量少了呀。
 
GET user_v1/profile/_search
{
"profile":true,
"query": {
"match": {
"nick": {
"query": "大师级别股市达人",
"minimum_should_match": "75%"
}
}
}
}

 
另外,像我这种单字段,match query,有没有什么其他的方法提升搜索的响应时间?比如 搜索返回结果里面有个 total hits,一般都有几十万,比如能不能直接 total hits 命中1万,就不要再去搜索其他的document了,最相关的1万就好了。(注意这里是 total hits 不是 分页参数  from size)
 
 
已邀请:

Jea - 一只猿

赞同来自: hapjin

第一个问题: 看情况, 一般是能
第二个问题: 用terminate_after, 具体看官方文档  https://www.elastic.co/guide/e ... .html
类库:  https://github.com/callmejea/PHP-Elasticsearch  简单的轮子自己看下

hapjin

赞同来自:

突然发现,官方文档还有个timeout参数,可以用来设置一次搜索请求超时时间。假设terminate_after设置为10000,文档的数量有几个亿,如果某个term在所有文档中实际出现的数目小于terminate_after设置的10000,那么针对这个term的查询 就会导致 "遍历" 所有的文档,为这类请求指定一个timeout参数,搜索就不会超时了,就能及时返回了。

要回复问题请先登录注册