Solr / Lucene: индексирование значений фасетов - PullRequest
4 голосов
/ 23 февраля 2010

Например, скажем, у меня есть следующий аспект:

Цвет

  • Красный (7825)
  • Оранжевый (2343)
  • Зеленый (843)
  • синий (5412)

В моей базе данных цвета были бы таблицей, и каждый цвет имел бы первичный ключ и имя / значение.

При индексации с помощью Solr / Lucene во всех приведенных мной примерах значение индексируется, а не первичный ключ. Поэтому, если я отфильтрую по красному цвету, я получу что-то вроде следующего:

http://www.example.com/search?color=Red

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

http://www.example.com/search?color=1

«1» представляет первичный ключ красного цвета. Мне интересно, должен ли я использовать этот подход, поскольку значения многих моих аспектов часто меняются, но первичные ключи остаются прежними. Кроме того, индекс должен быть синхронизирован с базой данных.

У вас уже есть опыт? Как вы думаете, это повлияет на производительность?

Заранее спасибо!

1 Ответ

1 голос
/ 24 февраля 2010

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

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

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

...