Оптимизация запросов _delete_by_query

Коллеги, добрый день!
Мне нужно ежедневно удалять большое количество документов из индекса, для этого я использую _delete_by_query запросы. Но удаление идет очень медленно.

Все оптимизации которые предлагает документация я выполнил: добавил slices, установил requests_per_second = -1 и даже запустил параллельные запросы на удаление из разных индексов, но это не позволило приблизится к приемлемой скорости выполнения.

Структура индекса такова: есть корневые сущности, к ним проиндексированы дочерние документы, мне нужно удалять одновременно корневые и все дочерние по id, для этого я использую такие запросы:

{
    "query": {
        "bool": {
            "should": [
                {
                    "bool": {
                        "should": [
                            {
                                "has_parent": {
                                    "parent_type": "plc",
                                    "query": {
                                        "ids": {
                                            "values": [
                                                "plc_37875675_37879713_0_0_0"
                                            ]
                                        }
                                    }
                                }
                            },
                            {
                                "ids": {
                                    "values": [
                                        "plc_37875675_37879713_0_0_0"
                                    ]
                                }
                            }
                        ]
                    }
                },
                {
                    "bool": {
                        "should": [
                            {
                                "has_parent": {
                                    "parent_type": "plc",
                                    "query": {
                                        "ids": {
                                            "values": [
                                                "plc_37875675_37879715_0_0_0"
                                            ]
                                        }
                                    }
                                }
                            },
                            {
                                "ids": {
                                    "values": [
                                        "plc_37875675_37879715_0_0_0"
                                    ]
                                }
                            }
                        ]
                    }
                }
            ]
        }
    }
}

Я объединяю в пачки по 100 id через условие ИЛИ. В каждом индексе по 3 шарды, индекс весит ~150Гб, что укладывается в рекомендуемые нормы и все же удаление идет по 18 секунд.

На всякий случай приложу ответ:

{"took":18793,"timed_out":false,"total":100,"deleted":100,"batches":6,"version_conflicts":0,"noops":0,"retries":{"bulk":0,"search":0},"throttled_millis":0,"requests_per_second":-1.0,"throttled_until_millis":0,"slices":[{"slice_id":0,"total":18,"deleted":18,"batches":1,"version_conflicts":0,"noops":0,"retries":{"bulk":0,"search":0},"throttled_millis":0,"requests_per_second":-1.0,"throttled_until_millis":0},{"slice_id":1,"total":19,"deleted":19,"batches":1,"version_conflicts":0,"noops":0,"retries":{"bulk":0,"search":0},"throttled_millis":0,"requests_per_second":-1.0,"throttled_until_millis":0},{"slice_id":2,"total":17,"deleted":17,"batches":1,"version_conflicts":0,"noops":0,"retries":{"bulk":0,"search":0},"throttled_millis":0,"requests_per_second":-1.0,"throttled_until_millis":0},{"slice_id":3,"total":15,"deleted":15,"batches":1,"version_conflicts":0,"noops":0,"retries":{"bulk":0,"search":0},"throttled_millis":0,"requests_per_second":-1.0,"throttled_until_millis":0},{"slice_id":4,"total":18,"deleted":18,"batches":1,"version_conflicts":0,"noops":0,"retries":{"bulk":0,"search":0},"throttled_millis":0,"requests_per_second":-1.0,"throttled_until_millis":0},{"slice_id":5,"total":13,"deleted":13,"batches":1,"version_conflicts":0,"noops":0,"retries":{"bulk":0,"search":0},"throttled_millis":0,"requests_per_second":-1.0,"throttled_until_millis":0}],"failures":[]}

Буду благодарен за любу информацию как еще можно оптимизировать или подкрутить настройки?

Очень странно, я переписал запрос в другом виде:

{
    "query": {
        "bool": {
            "should": [
                {
                    "ids": {
                        "values": [
                            "plc_53850710_53850837_68106904_68106905_68107000",
                            "plc_56213888_56213910_68063927_68063928_68064188"
                        ]
                    }
                },
                {
                    "has_parent": {
                        "parent_type": "plc",
                        "query": {
                            "ids": {
                                "values": [
                                    "plc_53850710_53850837_68106904_68106905_68107000",
                                    "plc_56213888_56213910_68063927_68063928_68064188"
                                ]
                            }
                        }
                    }
                }
            ]
        }
    }
}

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

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.