Как повысить релевантность без ущерба для производительности, масштабируемости и избежать эффекта дробления Elasticsearch - PullRequest
1 голос
/ 21 мая 2019

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

  1. Производительность : - будет меньше времени для поиска в сегменте с меньшим количеством документов (100 миллионов в моем случае использования), чем в одном фрагменте с огромным количеством документов (500 миллионов).Кроме того, позволяет распределять и распараллеливать операции по осколкам.

  2. Горизонтальная масштабируемость (HS) : - горизонтальное разделение / масштабирование объема содержимого.

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

Выше подробно объясняется здесь , и есть ниже 2 варианта, чтобы избежать этой проблемы, но я думаю, что оба решения имеютнекоторые минусы: -

1.Маршрутизация документов: В этом случае все документы будут находиться на одних и тех же осколках, которые теряют всю цель осколков.
2.dfs_query_then_fetch тип поиска: с ним связаны затраты производительности.

Мне интересно узнать ниже:

  1. Что ES делает по умолчанию?или есть какой-нибудь конфиг, которым можно управлять?
  2. Есть ли другое готовое решение, которое ES предлагает, чтобы избежать эффекта шардинга ?

1 Ответ

3 голосов
/ 21 мая 2019

прежде всего эта часть вашего вопроса, если не точная:

Но когда мы ищем по умолчанию, он просто переходит в 1 осколок и дает результат t.в этом случае релевантность не точна (так как на idf будет оказано существенное влияние) , а также может даже не дать никакого результата, если мой совпавший документ находится в другом шарде .и его называют Эффектом Осколка.

Жирная часть неверна.Поисковый запрос отправляется всем осколкам (конечно, или никто не будет использоватьasticsearch!), Но оценка вычисляется на основе осколков.Так что да, у вас может быть проблема с точностью до нескольких фрагментов, но только если у вас очень мало документов.С 500 миллионами точность не будет проблемой (если вы не используете неправильную маршрутизацию документов, см. здесь для получения дополнительной информации

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

Вы можете использовать 5 сегментов, не опасаясь проблем с релевантностью.Но не пытайтесь избежать эффекта шардинга ! Это то, что делает эластичный поиск таким крутым: D

...