我怎么知道两个不同的汇总是否汇总了同一份文档?

时间:2019-05-15 08:20:28

标签: elasticsearch

假设我有两个aggs:

   GET .../_search
   {
       "size": 0,
       "aggs": {
           "foo": {
               "terms": {
                   "field": "foo"
               }
           },
           "bar": {
               "terms": {
                   "field": "bar"
               }
           }
       }
   }

哪个返回以下内容:

   ...
   "aggregations": {
       "foo": {
           "doc_count_error_upper_bound": 0,
           "sum_other_doc_count": 0,
           "buckets": [
               {
                   "key": "Africa",
                   "doc_count": 23
               }
           ]
       },
       "bar": {
           "doc_count_error_upper_bound": 0,
           "sum_other_doc_count": 0,
           "buckets": [
               {
                   "key": "Oil",
                   "doc_count": 23
               }
           ]
       }
   }

我的问题是,我怎么知道“ foo”和“ bar”汇总表是否聚合了相同的23个文档?

我尝试在“ foo”和“ bar” aggs上添加一个子agg,以求和一个任意的数字字段,但这并不是万无一失的。

1 个答案:

答案 0 :(得分:0)

您可以添加子聚合来聚合文档的标识字段,可以使用术语或复合聚合来执行此操作。使用术语时,需要提供尺寸。参见以下示例:

GET .../_search
   {
       "size": 0,
       "aggs": {
           "foo": {
               "terms": {
                   "field": "foo"
               },
               "aggs" : {
                   "terms" : {
                       "field" : your_id_here
                   }
               }
           },
           "bar": {
               "terms": {
                   "field": "bar"
               },
               "aggs" : {
                   "terms" : {
                       "field" : your_id_here
                   }
               }
           }
       }
   }

然后您需要比较嵌套的聚合。

另一种方法是使用搜索查询过滤掉所需的文档。