Что такое DocValues ​​в Solr.

Я новичок в Солре. Я читал, что Solr использует инвертированный индекс, который эффективен для быстрого поиска. Но если запрос включает сортировку, фасетирование, люди рекомендуют использовать docvalues. Итак, мой вопрос заключается в том, что такое docvalues ​​и почему нам нужно использовать их в вышеуказанных случаях, а также почему инвертирование индекса неэффективно в вышеуказанных случаях. Пожалуйста, дайте подробное объяснение с примером, если это возможно.


person Muthu Prasanth    schedule 14.12.2018    source источник


Ответы (2)


Чтобы завершить ответ Гектора, я бы сказал, что инвертированный индекс эффективен для сопоставления документов с учетом основного поискового запроса.

Теперь, когда дело доходит до фильтрации/сортировки/огранивания, Solr работает с набором результатов, он уже имеет дело со списком совпадающих документов, и любой подзапрос будет пересекаться или объединяться с основным набором результатов.

На этом этапе мы можем логически представить себе ситуацию «документы к чему-либо»: например, если вам нужно отсортировать произвольный список docID по fieldX, вы фактически переупорядочите значения fieldX и получите соответствующие - отсортировано - идентификаторы документов.

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

Мы также можем (возможно, несколько неточно) ссылаться на теплый кеш против холодного кеша.

person EricLavault    schedule 16.12.2018

Короткий ответ заключается в том, что DocValues ​​— это оптимизация, помогающая использовать память и производительность для некоторых других функций Solr, которые люди связывают с поиском.

Из руководства по Solr:

DocValues ​​— это способ внутренней записи значений полей, который более эффективен для некоторых целей, таких как сортировка и фасетирование, чем традиционная индексация.

Почему DocValues?

Стандартный способ, которым Solr строит индекс, — инвертированный индекс. Этот стиль создает список терминов, найденных во всех документах в указателе, и рядом с каждым термином находится список документов, в которых термин встречается (а также количество раз, которое термин встречается в этом документе). Это делает поиск очень быстрым — поскольку пользователи выполняют поиск по терминам, наличие готового списка значений терминов и документов ускоряет процесс запроса.

Для других функций, которые мы теперь обычно связываем с поиском, таких как сортировка, фасетирование и выделение, этот подход не очень эффективен. Механизм фасетирования, например, должен искать каждый термин, который появляется в каждом документе, который будет составлять набор результатов, и извлекать идентификаторы документов, чтобы построить список фасетов. В Solr это сохраняется в памяти и может загружаться медленно (в зависимости от количества документов, терминов и т. д.).

В Lucene 4.0 был представлен новый подход. Поля DocValue теперь являются полями, ориентированными на столбцы, с сопоставлением документа и значения, созданным во время индексирования. Этот подход обещает снизить некоторые требования к памяти для fieldCache и значительно ускорить поиск для фасетирования, сортировки и группировки.

person Hector Correa    schedule 14.12.2018
comment
Инвертированный индекс определяет список документов для каждого термина (токена). Таким образом, для огранки очень легко использовать инвертированный индекс, чтобы правильно подсчитывать? Итак, как docvalues ​​обеспечивают лучшую оптимизацию здесь - person Muthu Prasanth; 15.12.2018