Индексация другого типа Объектов/Объектов с Solr Lucene

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

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

Как я заставляю свой Lucene индексировать те типы, но каждый тип с различной Схемой?

9
задан Yos 14 June 2010 в 11:41
поделиться

4 ответа

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

1
ответ дан 4 December 2019 в 21:47
поделиться

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

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

1
ответ дан 4 December 2019 в 21:47
поделиться

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

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

P.S. Еще несколько простых советов.

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

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

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

2
ответ дан 4 December 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: