elasticsearch,aggregation,Filter,elasticsearch,Aggregation" /> elasticsearch,aggregation,Filter,elasticsearch,Aggregation" />

Filter 将聚合限制为筛选器的结果

Filter 将聚合限制为筛选器的结果,filter,elasticsearch,aggregation,Filter,elasticsearch,Aggregation,给定一组在一个字段中具有给定值的文档,我想知道有多少文档在第二个字段中具有每个值 我尝试通过以下查询的术语聚合来实现这一点: { "size": 0, "filter": { "term": { "field1": "value" } }, "aggregations": { "field2" : { "terms" : { "field" : "field2" }

给定一组在一个字段中具有给定值的文档,我想知道有多少文档在第二个字段中具有每个值

我尝试通过以下查询的术语聚合来实现这一点:

{
    "size": 0,
    "filter": {
        "term": {
            "field1": "value"
        }
    },
    "aggregations": {
        "field2" : {
            "terms" : { "field" : "field2" }
        }
    }
}
但是返回的计数显示了整个索引中第二个字段的每个值的文档数,而不限于第一个字段具有给定值的文档数


我做错了什么?

您尝试过使用过滤查询吗

{
    "query": {
        "filtered": {
           "query": {
                "match_all": {}
           },
           "filter": {
               "term": {
                  "field1": "value"
               }
           }
        }
    },
    "aggregations": {
        "field2": {
           "terms": { "field": "field2" }
        }
    }
}

这里有一个比较:

简言之,顶级过滤器的作用就像链接中的post_过滤器。要过滤然后计算聚合,需要使用查询


如果您担心查询中的分数计算会对性能造成影响,您可以研究常量分数查询,它基本上是一个过滤器包装器查询。

但是建议使用过滤器而不是查询来按精确值进行过滤?另一个问题:如何应用多个条件?过滤器提供了一个,没有发现的查询…我想知道同样的我自己。。。所以,如果我们需要使用聚合,我们基本上应该停止同时使用过滤器?那似乎不是right@VitorM是的,聚合始终在查询范围内运行(默认情况下,
match\u all
)。不,您不应该停止对聚合使用过滤器。有一种方法可以缩小过滤器的性能和缓存范围,然后有一种方法可以为其子聚集过滤聚合桶。将这两种方法结合起来可以实现真正强大的过滤。