Индексирование различных типов сущностей / объектов с помощью Solr Lucene - PullRequest
9 голосов
/ 14 июня 2010

Допустим, я хочу проиндексировать свой магазин с помощью Solr Lucene.

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

Как мне заставить свой Lucene проиндексировать эти типы, а каждый тип с разной схемой?

Ответы [ 4 ]

5 голосов
/ 15 июля 2010

Я рекомендую создать ваш индекс таким образом, чтобы у всех ваших сущностей были более или менее одинаковые базовые поля: title, content, url, uuid, entity_type, entity_sourcename и т. Д. Если у каждой из ваших сущностей есть уникальный набор соответствующего поля индекса, у вас будут трудные времена.Построение запроса для одновременного поиска по всем объектам, и ваше представление результатов может стать огромным беспорядком.Если вам нужны определенные поля для конкретной сущности, то добавьте ее и выполните специальную логику для этой сущности на основе ее entity_type.

Я говорю по опыту: мы управляем индексом с более чем 10 различными сущностями.и этот подход работает как шарм.

PS Несколько других простых советов.

  1. Убедитесь, что ваш документ Lucene содержит все необходимые данные, чтобы построить результат и показать его пользователю (так что вам не нужно идти в базу данных, чтобы построить результат).Запросы Lucene обычно выполняются намного быстрее, чем запросы к базе данных.
  2. Если вам абсолютно необходимо использовать базу данных для построения набора результатов (например, для применения разрешений), сначала используйте запрос Lucene, чтобы сузить результаты, а затем запрос базы данных, чтобы отфильтровать их.
  3. Не бойтесь добавлять настраиваемые поля к некоторым вашим документам, если вам это нужно: воспринимайте документ Lucene как хранилище данных со значением ключа.
2 голосов
/ 19 июля 2010

Многоядерный - это подход с осторожностью.С такой простой схемой, как ваша, это лучший способ выполнить рекомендации Buru.Это означает, что нужно найти общие поля между вашими различными сущностями, а затем поля, которые будут использоваться только одним или несколькими из них.Затем вы можете добавить поле «type» или «type_id», в котором будет указано, является ли ваша сущность продуктом, обзор продукта ...

Это позволит вам получить уникальный индекс и быстро обрабатывать запросы..

1 голос
/ 15 июня 2010

Возможно, вы захотите иметь 3 индекса: «Продукты», «Отзывы о товарах» и «Статьи».Каждый индекс может иметь свою собственную схему.Разница между Lucene и подходом реляционных БД состоит в том, что строка в БД, примерно , переводится в документ в Lucene.Примечание: каждый документ может иметь свою собственную схему (что является еще одним отличием от реляционной базы данных).

1 голос
/ 14 июня 2010

В Lucene / Solr каждому документу не нужно устанавливать значение для каждого поля. В одной и той же схеме вы можете иметь набор полей для объекта A и другой набор полей для объекта B и просто заполнить соответствующее поле в зависимости от объекта.

С Solr у вас также есть возможность перейти на многоядерный режим. Каждое ядро ​​имеет свою схему. Вы можете определить ядро ​​для каждой сущности.

...