Elasticsearch lucene, понять путь к коду для поиска - PullRequest
0 голосов
/ 24 мая 2018

Я хочу понять, как каждый из файлов индекса lucene (nvd, dvd, tim, doc ... в основном эти четыре) используется в запросе ES.Например, у моего индекса есть десять документов, и я делаю запрос агрегации.Я хотел бы понять, как ES / Lucene осуществляет доступ к этим четырем файлам для одного запроса.

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

Я хочу сейчас углубиться на уровне Luceneа также и, возможно, отладить код и увидеть в действии.У кода Lucene есть нулевые сообщения журнала для связанных классов IndexReader.Также отладка кода lucene напрямую кажется бесполезной, поскольку unittest не создает индексы с файлами tim, doc, nvd, dvd

Есть ли какие-нибудь указатели?

1 Ответ

0 голосов
/ 24 мая 2018

Как я знаю, ES мало что делает с деталями поиска, если вы хотите оптимизировать поиск, мой опыт оптимизирует макет ваших данных, вот несколько важных файлов lucene:

(см. http://lucene.apache.org/core/7_2_1/core/org/apache/lucene/codecs/lucene70/package-summary.html#package.description):

  1. Указатель терминов (.tip) # ON MEMORY .
  2. Словарь терминов (.tim) # ON DISK .
  3. Частоты (.doc) # ON DISK .
  4. Значения для документа (.dvd, .dvm), очень полезны при агрегировании. # ON DISK .
  5. Индекс поля (.fdx) # ON MEMORY .
  6. Данные поля (.fdt), наконец, выборка данных с диска здесь. # ON DISK.

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

  1. при попытке использовать малый тип даты, например: значения INTEGER или LONG вместо STRING.
  2. ЗАКРЫТЬ DocValues ​​на ненужном поле, одновременно откройте DocValues ​​на том поле, которое вы хотите отсортировать / агрегировать.
  3. просто включите поле необходимости в источнике, например "_source": {"includes": ["some_necessasy_field "]}.
  4. только индексное поле, которое вам нужно, используя сопоставления, определенные ES.
  5. разделите ваши данные на мультииндекс.
  6. добавьте SSD.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...