1

不知道如何提出问题。我正在使用 Elasticsearch 2.2。

让我们从一个由 5 个文档组成的数据集示例开始:

[
  {
    "header": {
      "called_entity": { "uuid": "a" },
      "coverage_entity": {},
      "sucessful_transfers": 1
    }
  },
  {
    "header": {
      "called_entity": { "uuid": "a" },
      "coverage_entity": { "uuid": "b" },
      "sucessful_transfers": 1
  }
  },
  {
    "header": {
      "called_entity": { "uuid": "b" },
      "coverage_entity": { "uuid": "a" },
      "sucessful_transfers": 1
    }
  },
  {
    "header": {
      "called_entity": { "uuid": "b" },
      "coverage_entity": { "uuid": "a" },
      "sucessful_transfers": 0
    }
  }
]

called_entity总是有一个uuidcoverage_entity可以是空的,或者有一个uuid

我想要的是在called_entity.uuidcoverage_entity.uuid上进行聚合,然后计算文档的总量和successful_transfers 的总和。因此,对于这 5 个文档,我会得到类似的结果:

uuid,doc_count,successful_transfers_count
"a",4,3
"b",3,2

问题是这意味着可以在多个聚合中使用同一个文档,只要聚合键在 called_entity.uuid 或 coverage_entity.uuuid 中(我什至不确定这是否可能,这就是我发布的原因这里)。

我目前正在做的只是在called_entity.uuid字段上进行聚合,但这当然还不够:

{
  "size": 0,
  "query": {
    "match_all": {}
  },
  "aggs": {
    "dim_1": {
      "terms": {
        "field": "header.called_entity.uuid",
        "size": 0
      },
      "aggs": {
        "successful_transfers": {
          "sum": {
            "field": "header.successful_transfers"
          }
        }
      }
    }
  }
}

这给了我类似的东西:

uuid,doc_count,successful_transfers_count
"a",2,2
"b",2,1

...这不是我想要的。那么,我如何聚合多个值,或者对于给定的聚合,如何根据所有文档中存在的值(不仅仅是聚合中的一个)计算数据?

谢谢你。

4

1 回答 1

2
{
  "size": 0,
  "query": {
    "match_all": {}
  },
  "aggs": {
    "dim1": {
      "terms": {
        "script" : "return doc['header.called_entity.uuid'] + doc['header.coverage_entity.uuid']",
        "size": 10
      },
      "aggs": {
        "successful_transfers": {
          "sum": {
            "field": "header.successful_transfers"
          }
        }
      }
    }
  }
}
于 2016-07-20T13:52:33.037 回答