首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹性搜索与滤波器优化

弹性搜索与滤波器优化
EN

Stack Overflow用户
提问于 2015-10-17 00:41:22
回答 1查看 79关注 0票数 0

elasticsearch会自动优化过滤器吗?例如:在“和”过滤器中,如果存在为gte和lte运营商分别定义的多个数字范围筛选器,而不是一个同时具有lte和gte边界的范围筛选器,它会导致性能问题吗?ES会自动优化这些过滤器吗?

代码语言:javascript
复制
"filter" : {
"and" : [
    {
    "range" : {
            "age" : {
            "gte": 10
            }
    }
    },
    {
    "range" : {
            "age" : {
                "lte": 90
            }
    }
    },
    {
    "range" : {
            "age" : {
            "gte": 30
            }
    }
    }                                                               
]}

更新

想添加:虽然合并边界是有意义的,但当我的用户能够动态创建过滤器时,我想检查这个情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-17 03:07:52

使用过滤器的主要经验规则是,您应该始终首先应用最严格的筛选器,以便减少匹配的文档集,并允许下一个筛选器处理尽可能少的文档。

此外,在您演示的情况下,为同一个range字段设置三个不同的age过滤器是没有意义的,您应该将它们合并为一个单独的过滤器:

代码语言:javascript
复制
"filter": {
    "range": {
        "age": {
            "gte": 30,
            "lte": 90
        }
    }
}

还请注意,在可能的情况下,您应该更喜欢bool/must而不是and过滤器,这主要是因为and过滤器没有缓存。

最后,上面的内容只适用于2.0前的弹性搜索版本。从2.0开始,整个查询/过滤器DSL将是彻底检修,查询将更加智能。

更新

因为您的用户可以创建他们自己的过滤器,所以主要的经验法则仍然存在,也就是说,您应该尝试对过滤器进行排序,以便首先使用最严格的过滤器。然而,如果你的用户真的有能力创建他们自己的过滤器,并且你没有干扰他们提交的内容,那么你应该教育他们(如果有可能的话)如何最好地创建过滤器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33181470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档