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