Производительность запроса терминов с большим количеством элементов

Я планирую использовать Terms Query с большим количеством терминов (в зависимости от случая до 40-50 тысяч терминов) во всех моих запросах.

Эти термины будут получены из другого индекса с помощью поиска, как описано здесь. Elasticsearch принимает их внутрь, так что, по крайней мере, они не пройдут по сети, но сам запрос выглядит довольно тяжело.

Мне было интересно, будет ли производительность запроса в порядке. В любом случае, я планирую провести стресс-тест, но не уверен, что это пойдет на пользу. Кто-то имел опыт работы с такого рода запросами или знает, как Elasticsearch справляется с ними внутри компании?

Благодарю вас!


person Antonio Val    schedule 13.03.2017    source источник


Ответы (2)


Производительность после сотен условий будет быстро снижаться: https://github.com/elastic/elasticsearch/issues/18829

Ниже приводится ветка uber, в которой он изначально упоминался: https://github.com/elastic/elasticsearch/issues/11511#issuecomment-224028056

ES будет искать каждый термин отдельно в ваших осколках, поэтому по мере добавления новых терминов это увязнет в кластере. Однако, как и во всем Elasticsearch, может помочь настройка количества сегментов (реплик в вашем случае), количества узлов и других параметров конфигурации. Я бы предложил тестирование производительности, чтобы узнать, с чем вы имеете дело, но изначально ничего не ожидайте.

person ryanlutgen    schedule 13.03.2017
comment
Спасибо за ссылку! Интересно, происходит ли это даже с использованием механизма поиска... Я спросил в выпуске. - person Antonio Val; 13.03.2017

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

Кроме того, я упомянул об этом в выпуске, но я провел стресс-тест и проверил это сам:

фильтрация около 20 тысяч терминов делает запрос довольно медленным (более 500 мс).

person Antonio Val    schedule 22.02.2018
comment
Что ж, секунда кажется мне приемлемой... Вопрос для меня: быстрее ли выполнять 20 000 запросов последовательно, чем один запрос с 20 000 терминов? В этом случае я бы обвинил реализацию ES в том, что она довольно глупая. - person Radio Controlled; 29.03.2018
comment
Это зависит от варианта использования, но для поиска приложений наличие большого количества пользователей, выполняющих запросы, которые занимают секунду, в целом слишком медленны. И речь идет не только о том, насколько медленным он может быть, но и о накладных расходах, которые он приносит системе, и о том, насколько хорошо он будет масштабироваться. - person Antonio Val; 30.03.2018
comment
Что касается последовательного выполнения 20 тыс. запросов, я думаю, это будет медленнее, потому что простое выполнение запроса, даже если оно быстрое, имеет свою стоимость. Но в этом случае мы не можем сравнивать, я думаю, поскольку запрос терминов не равен созданию множества запросов терминов, требуется больше работы, например, фильтрация результата и т. д. - person Antonio Val; 30.03.2018
comment
Здравствуйте, у вас есть данные примерно для 500 терминов? Будет ли это медленно или очень быстро? Спасибо большое! - person ch271828n; 18.04.2020