2010-06-14 2 views
9

Предположим, я хочу индексировать мой магазин, используя Solr Lucene.Индексирование различных типов объектов/объектов с Solr Lucene

У меня есть много типов сущностей: Продукты, Обзоры продукции, Статьи

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

ответ

1

Возможно, у вас есть 3 указателя, называемые Products, ProductReviews и Articles. Каждый индекс может иметь свою собственную схему. Разница между Lucene и реляционным db-подходом заключается в том, что строка в db, примерно переводит на документ в Lucene. Примечание: каждый документ может иметь свою собственную схему (что является еще одним отличием от реляционного db).

1

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

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

5

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

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

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

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

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

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

Смежные вопросы