不要急,总有办法的

请教Range查询

Elasticsearch | 作者 ChenMing | 发布于2017年09月08日 | 阅读数:6209

请问把如下一个区间查询, 分成两个区间的交集来查询,性能上是否一样。ES是否会把分开的两个查询优化合并成一个呢?
{
    "range": {
        "date": {
            "gt": "2017-09-01",
            "lt": "2017-09-01"
        }
    }
}
是否和
{
    "bool": {
        "must": [
            {
                "range": {
                    "date": {
                        "gt": "2017-09-01"
                    }
                }
            },
            {
                "range": {
                    "date": {
                        "lt": "2017-09-01"
                    }
                }
            }
        ]
    }
}

已邀请:

Cheetah

赞同来自: novia ChenMing

一般来讲,你的日期查询是不需要相关度的,那么建议是放在filter中,filter处理时实际是将一个个的条件对应到段上,再做缓存(bitset),bitset之间然后再做交集,这个交集是非常快的
基于以上,那么你的问题就得到解决了,单纯从效率来讲的话,一个建立N个bitset,第二个建立N*2个bitset,从这里来讲,第一个号
但是从另外一方面来讲,用到第一个条件的情况很少,毕竟要匹配2个条件,那么意味着缓存使用率可能不高(这里使用可能,因为你这和你业务相关)
反之,第二个查询从广义上讲,用到缓存的几率会大很多
所以你要根据你的业务综合考虑,不是简单的哪个效率高

ChenMing - 00后

赞同来自:

感谢

要回复问题请先登录注册