Эластичная фильтрация сегмента поиска

Я хочу фильтровать данные из сегментов агрегации. Я написал такой запрос

{
    "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
                                    }

Который занимает второе место в сегментах агрегации Спасибо за помощь заранее

Вы нашли решение этой проблемы?

Joe 19.03.2021 19:38
1
1
484
1

Ответы 1

Если вы хотите удалить его из всего набора результатов, вы можете использовать блок запроса. В этом случае сначала будет запущен запрос, а затем будет выполнена агрегация результата запроса.

{
"query": {
    "bool" : {
        "must": [
            // Your conditions here
        ]
    }
},
"size":0,
"aggregations": {
    "latestNode": {
        "terms": {"field": "uri"},
        "aggregations": {
            "top_nodes": {
                "top_hits": {
                    "sort": [
                        {
                            "timestamp": {
                                "order": "desc"
                            }
                        }
                    ],
                    "size" : 1
                }
            }
        }
    }
}

Спасибо за быстрый ответ, но мне нужно запустить фильтр для сегментов агрегации, только мое требование такое

user3895003 31.01.2019 10:07

Можете ли вы объяснить больше о точном варианте использования? Может быть, это можно решить как-то по-другому.

Pranav 31.01.2019 10:38

Я использую несколько документов с одним и тем же uri (поле в документе) с разной отметкой времени, например, есть несколько uris, поэтому мне нужно найти уникальный документ с uri в качестве ключа, но с последней отметкой времени

user3895003 31.01.2019 10:53

Другие вопросы по теме