Elasticsearch:聚合两个字段
Elasticsearch: aggregate on two fields
不确定如何提出问题。
我正在使用 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 总是有一个 uuid。
coverage_entity 可以为空,或者有一个 uuid.
我想要的是在 called_entity.uuid 或 coverage_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
...这不是我想要的。那么,我如何聚合多个值, 或 对于给定的聚合,根据所有文档中存在的值(而不仅仅是聚合中的一个)计算数据?
谢谢。
{
"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"
}
}
}
}
}
}
不确定如何提出问题。 我正在使用 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 总是有一个 uuid。 coverage_entity 可以为空,或者有一个 uuid.
我想要的是在 called_entity.uuid 或 coverage_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
...这不是我想要的。那么,我如何聚合多个值, 或 对于给定的聚合,根据所有文档中存在的值(而不仅仅是聚合中的一个)计算数据?
谢谢。
{
"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"
}
}
}
}
}
}