首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ElasticSearch中查询和筛选器的不同

问ElasticSearch中查询和筛选器的不同
EN

Stack Overflow用户
提问于 2015-03-25 23:58:33
回答 1查看 4.7K关注 0票数 3

我对查询和过滤器之间的区别感到有点困惑。我的困惑源于我在文档中读到的下列句子。

  1. 与查询相比,建议使用筛选器,因为过滤器不会触发分数计算。
  2. 只有当响应是“是/否”或精确搜索时,才应使用筛选器。
  3. 过滤器可以有名为“查询筛选器”的查询(如“术语筛选器”等)。

我只想通过4个属性值进行筛选,在几个字段上放入一个日期范围和和(聚合)。就像这样

代码语言:javascript
复制
sum (salary, tenure) where name = A AND age = B AND join_date between X and Y 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-27 03:19:28

将查询视为模糊匹配,将筛选器视为传统的数据库样式查询。如果它有助于将查询看作一个类似的数据库,尽管更好。

查询将分析您的搜索,将其分解为几个部分,然后搜索与您的查询类似的文档。每个文档都得到一个分数--最好的分数获胜,并在结果集中按分数顺序返回。所有这些得分都是昂贵的,并且会减缓你的反应。

过滤器简单地说,我是否包括或排除这段数据,不涉及得分。筛选器匹配并包含文档,或者它不匹配,并且它被排除在外。这一切都发生得很快,而且不涉及分类。

您的示例“查询”不需要查询,它是名称= A和age = B上的筛选器。查询可能包括匹配name = AA的文档,因为它有点像A,因此在名称上有一个术语过滤器,在join_date上有一个范围过滤器。然后你可以做你的聚合得到你的和。

代码语言:javascript
复制
{
"query": {
    "filtered": {
        "filter": {
            "and": [
                { "range": {
                    "join_date": {
                        "from": "X",
                        "to": "Y"
                    }
                }},
                {"term": { "name": "A" }},
                {"term": { "age": "B" }},
            ]
        }
    }
},
"size": 0,
"aggs" : {
    "salary_sum": {
            "sum": { "field": "salary" }
    },
    "tenure_sum": {
            "sum": { "field": "tenure" }
    }
}
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29268763

复制
相关文章

相似问题

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