Что такое DocValues в Solr.
Я новичок в Solr. Я читал, что Solr использует инвертированный индекс, который эффективен для быстрых результатов поиска. Но если запрос включает в себя сортировку, огранку, люди рекомендуют использовать значения документов. Поэтому мой вопрос заключается в том, что такое docvalues и почему мы должны использовать в вышеуказанных случаях, а также, как инвертирование индекса неэффективно в вышеуказанных случаях. Пожалуйста, дайте подробное объяснение с примером, если это возможно.
2 ответа
Чтобы завершить ответ Гектора, я бы сказал, что инвертированный индекс эффективен для сопоставления документов по основному поисковому запросу.
Теперь, когда дело доходит до фильтрации / сортировки / выполнения огранки, Solr воздействует на набор результатов, он уже имеет дело со списком совпадающих документов, и любой подзапрос будет пересекаться или объединяться с основным набором результатов.
На этом этапе мы можем логически подумать о ситуации с документами к чему-либо: например, если бы вы сортировали произвольный список docID по fieldX, вы бы фактически переупорядочили значения fieldX и получили соответствующие отсортированные docID.
Таким образом, если fieldCache построен с включенным docValues для соответствующих полей, готовность к использованию сопоставления документа со значением значительно улучшит использование fieldCache.
Мы также можем (возможно, несколько неточно) ссылаться на теплый кеш против холодного кеша.
Короткий ответ: DocValues - это оптимизация, которая помогает использовать память и производительность для некоторых других функций Solr, которые люди связывают с поиском.
Из руководства Solr:
DocValues - это способ внутренней записи значений полей, который более эффективен для некоторых целей, таких как сортировка и фасетирование, чем традиционное индексирование.
Почему DocValues?
Стандартный способ, которым Solr создает индекс, - это инвертированный индекс. Этот стиль создает список терминов, найденных во всех документах в индексе, и рядом с каждым термином находится список документов, в которых появляется термин (а также сколько раз термин появляется в этом документе). Это делает поиск очень быстрым - поскольку пользователи выполняют поиск по терминам, наличие готового списка значений терминов в документе ускоряет процесс запроса.
Для других функций, которые мы теперь обычно связываем с поиском, таких как сортировка, огранка и выделение, этот подход не очень эффективен. Механизм фасетирования, например, должен искать каждый термин, который появляется в каждом документе, который будет составлять набор результатов, и извлекать идентификаторы документа для построения списка фасетов. В Solr это сохраняется в памяти и может загружаться медленно (в зависимости от количества документов, условий и т. Д.).
В Lucene 4.0 был представлен новый подход. Поля DocValue теперь являются полями, ориентированными на столбцы, с отображением документа на значение, созданным во время индекса. Этот подход обещает облегчить некоторые требования к памяти для fieldCache и значительно ускорить поиск для огранки, сортировки и группировки.