Elasticsearch: Свернутые документы на одном и том же осколке улучшают производительность при свертывании? - PullRequest
1 голос
/ 30 сентября 2019

Вложенные отношения Elasticsearch Parent / Child подразумевают, что родитель и потомки находятся в одном и том же шарде, используя поле _routing во время приема.

Мне было интересно, если использование одного и того же процесса обеспечит повышение производительности при использовании collapse особенность эластичного поиска или это сделает его худшим?

Если мы посмотрим на оба случая:

1) Маршрутизация к одному и тому же осколку: осколок может выполнить свертывание самостоятельно ивернуть уже полностью свернутые документы

2) Документ находится на многих осколках: развал может произойти только позже, когда все осколки вернут много документов, которые будут свернуты позже.

Я не знаю, если Flexiblesearchбудет делать 2-е, даже если документы находятся на одном и том же осколке.

Спасибо.

1 Ответ

0 голосов
/ 30 сентября 2019

Полное происхождение коллапса поля (введено в ES 5.3) можно найти в PR 22337 ( выпуск 21833 ).

Первоначально идея состояла в том, чтобысоздайте новое агрегирование top_groups, смоделированное после комбо terms + top_hits, но в итоге оно было признано дорогостоящим и не обязательно оптимальным.

Сжатие полей наконец-то реализовано на уровне поиска, поскольку оно может извлечь выгоду из существующих фаз запроса / выборки и требует намного меньше памяти, чем при агрегации. Кроме того, нумерация страниц могла бы работать из коробки.

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

Итак, короче говоря, при свертывании полей нет такого ограничения для размещения всех документов в одном и том же сегменте, поскольку будет отправлен запрос на выборку (этап 2). в любом случае для всех шардов.

Как всегда, лучший способ - попробовать и оценить производительность.

  • 1 индекс с 1 шардом (с ключом маршрутизации и без него)
  • 1 индекс с несколькими осколками (с ключом маршрутизации и без него)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...