Я хочу фильтровать данные из сегментов агрегации. Я написал такой запрос
{
"size":0,
"aggregations": {
"latestNode": {
"terms": {"field": "uri"},
"aggregations": {
"top_nodes": {
"top_hits": {
"sort": [
{
"timestamp": {
"order": "desc"
}
}
],
"size" : 1
}
}
}
}
}
}
После этого я получаю следующий результат:
{
"took": 14,
"timed_out": false,
"_shards": {
"total": 10,
"successful": 10,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 6,
"max_score": 0,
"hits": []
},
"aggregations": {
"latestNode": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "2FF70002AC01F743",
"doc_count": 2,
"top_nodes": {
"hits": {
"total": 2,
"max_score": null,
"hits": [
{
"_index": "VirtualDB",
"_type": "doc",
"_id": "E85FnWgBhR1fwKHvHfpI",
"_score": null,
"_source": {
"uri": "2FF70002AC01F743",
"status": "WARNING",
"name": "Test_20k_11Test1",
"timestamp": 1548664071116
},
"sort": [
1548664071116
]
}
]
}
}
},
{
"key": "vDB1234",
"doc_count": 2,
"top_nodes": {
"hits": {
"total": 2,
"max_score": null,
"hits": [
{
"_index": "VirtualDB",
"_type": "doc",
"_id": "Es5EnWgBhR1fwKHvm_r5",
"_score": null,
"_source": {
"uri": "vDB1234",
"status": "OK",
"name": "Test_20k_11Test",
"timestamp": 15486640781116
},
"sort": [
15486640781116
]
}
]
}
}
},
{
"key": "2FF70002AC01F744",
"doc_count": 1,
"top_nodes": {
"hits": {
"total": 1,
"max_score": null,
"hits": [
{
"_index": "VirtualDB",
"_type": "doc",
"_id": "Fc5GnWgBhR1fwKHvPvrm",
"_score": null,
"_source": {
"uri": "2FF70002AC01F744",
"status": "WARNING",
"name": "Test_20k_11Test1",
"timestamp": 1548664061116
},
"sort": [
1548664061116
]
}
]
}
}
},
{
"key": "vDB1235",
"doc_count": 1,
"top_nodes": {
"hits": {
"total": 1,
"max_score": null,
"hits": [
{
"_index": "VirtualDB",
"_type": "doc",
"_id": "Ec5DnWgBhR1fwKHvb_oe",
"_score": null,
"_source": {
"uri": "vDB1235",
"status": "OK",
"name": "Test_20k_11Test",
"timestamp": 15486640751116
},
"sort": [
15486640751116
]
}
]
}
}
}
]
}
}
}
Теперь я хочу удалить некоторые элементы из ведер на основе таких условий, как
если uri=vDB1234 и "статус"="ОК","имя"="Test_20k_11Test" то удалить
{
"uri": "vDB1234",
"status": "OK",
"name": "Test_20k_11Test",
"timestamp": 15486640781116
}
Который занимает второе место в сегментах агрегации Спасибо за помощь заранее
Если вы хотите удалить его из всего набора результатов, вы можете использовать блок запроса. В этом случае сначала будет запущен запрос, а затем будет выполнена агрегация результата запроса.
{
"query": {
"bool" : {
"must": [
// Your conditions here
]
}
},
"size":0,
"aggregations": {
"latestNode": {
"terms": {"field": "uri"},
"aggregations": {
"top_nodes": {
"top_hits": {
"sort": [
{
"timestamp": {
"order": "desc"
}
}
],
"size" : 1
}
}
}
}
}
Спасибо за быстрый ответ, но мне нужно запустить фильтр для сегментов агрегации, только мое требование такое
Можете ли вы объяснить больше о точном варианте использования? Может быть, это можно решить как-то по-другому.
Я использую несколько документов с одним и тем же uri (поле в документе) с разной отметкой времени, например, есть несколько uris, поэтому мне нужно найти уникальный документ с uri в качестве ключа, но с последней отметкой времени
Вы нашли решение этой проблемы?