多个过滤器聚合与返回所有桶

时间:2016-07-12 15:29:43

标签: elasticsearch aggregation

我很有兴趣进行子聚合,但对于特定的关键字值。

 "aggregations" : {
        "Keyword" : {
          "terms" : {
            "field" : "keyword"
          },
         "aggregations" : {
            "Concept" : {
          "terms" : {
            "field" : "concept"
          }
        }

以下仅返回前10位,不需要包含我感兴趣的值。

我认为有两种主要方法可以解决我的问题:

  • 返回所有桶,然后选择我感兴趣的桶。
  • 为我感兴趣的所有值添加过滤器聚合。因此,如果我对10个关键字/值感兴趣,我将执行10次过滤器聚合。

绩效方面的最佳解决方案是什么?

1 个答案:

答案 0 :(得分:0)

  

因此,如果我对10个关键字/值感兴趣,我将执行10次过滤器聚合。

这不一定是真的。

您可以创建一个过滤器来消除不需要的关键字,您可以在查询阶段预先执行此操作:

{
  "size" : 0,
  "query" : {
    "bool" : {
      "filter" : [
        {
          "terms" : {
            "keyword" : [ "abc", "def", "ghi" ]
          }
        }
      ]
    }
  },
  "aggs" : {
    "Keyword" : {
      "terms" : {
        "field" : "keyword"
      },
      "aggs" : {
         "Concept" : {
           "terms" : {
             "field" : "concept"
          }
        }
      }
    }
  }
}

查询阶段会将其过滤为abcdefghi。然后聚合将按预期工作,但仅针对具有这些值的文档。