Не знаете, как сформулировать вопрос. Я использую 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 }
}
}
}
}
}
}
Да, это будет работать для моего упрощенного примера, но мне нужно сделать более сложные фильтры для каждой агрегации, которые являются логическими условиями для объектов named_entity, coverage_entity, both и/или других полей. Спасибо в любом случае ... Я надеялся, что ключ может быть по крайней мере доступен в скрипте, но я не мог найти ничего в документах или в других вопросах ... – Raphael
На самом деле, он работает (я объединил обе агрегации на стороне сервера, после получения ответа от ElasticSearch). Большое спасибо! – Raphael