1
不知道如何制定问题。 我正在使用Elasticsearch 2.2。Elasticsearch:使用存储桶值过滤聚合
让我们先从数据集的一个例子,形成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:
{
"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"
}
}
}
}
}
}
从那么现在,聚集产生了条款或者header.called_entity.uuid,或header.coverage_entity.uuid。
如何使用聚合键的值过滤我的聚合?例如,如果我要计算每个存储桶的数量,则只有uuid取自header.called_entity.uuid。类似的东西:
{
"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"
}
},
"from_called_entity": {
"filter": {
"term": { "header.called_entity.uuid": BUCKET_KEY }
}
}
}
}
}
}
是的,这对我的简化示例很有用,但是我需要在每个集合上执行更复杂的过滤器,这些集合在被调用实例,coverage_entity,两者和/或其他字段上都是布尔条件。无论如何,谢谢......我希望钥匙至少可以在脚本中使用,但我无法在文档或其他问题中找到任何内容...... – Raphael
实际上,它的工作原理(我合并了服务器端的两个聚合,收到ElasticSearch的响应后)。非常感谢! – Raphael