Каким образом Lucene / Solr достигает высокой производительности в многополевом / фасетном поиске?

Контекст

Это вопрос, в основном о внутренностях Lucene (или, возможно, Solr). Основная тема - фасетный поиск , при котором поиск может выполняться по нескольким независимым измерениям (фасетам) объектов (например, по размеру, скорости, цене автомобиля).

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

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

Вопрос

Инвертированный индекс Lucene может храниться в реляционной базе данных, и, естественно, пересечение совпадающих документов может быть легко достигнуто с РСУБД, использующей индексы с одним полем.

Следовательно, в Lucene якобы есть некоторые продвинутые методы для запросов с несколькими полями, отличные от простого пересечения совпадающих документов на основе инвертированного индекса.

Итак, вопрос в том, что это такое. техника / трюк? В более широком смысле: Почему Lucene / Solr теоретически может обеспечить лучшую производительность фасетного поиска, чем РСУБД (если так)?

Примечание: Я сначала предполагаю, что Lucene будет использовать какой-то метод разделения пространства для разделения векторного пространства, построенного из полей документа как измерений, но насколько я понимаю, Lucene не основан исключительно на векторном пространстве.

9
задан Sam Holder 5 April 2011 в 02:53
поделиться