Поиск Solr по нескольким ядрам - PullRequest
1 голос
/ 16 сентября 2011

У меня два ядра Solr.

Core0 импортирует данные из таблицы Oracle, которая называется items. Каждый элемент имеет уникальный идентификатор (item_id) и является либо элементом видео, либо аудио элементом (item_type). Другие поля содержат тексты для поиска (описание, комментарии и т. Д.)

Core1 импортирует данные из двух таблиц (из другой базы данных) с именами video_item_dates и audio_item_dates, которые записывают даты появления элемента на определенном рынке. Поля: item_id, item_market и даты. Одна строка будет выглядеть следующим образом (item_001, 'Europe', '2011/08/15, 2011/08 / 17,2011 / 08/20). Уникальный ключ в этих двух таблицах базы данных - это сочетание item_id и item_market. Я свел данные в один индекс для Core1.

Моя проблема сейчас заключается в поиске обоих ядер для получения одного результата. Типичный запрос будет выглядеть так: «Какие элементы имеют слово Hurricane в поле описания и работают на североамериканском рынке в августе 2011 года?». Я мог бы разделить этот запрос на два разных запроса и заставить их работать с другим ядром, а затем объединить результаты. Но, учитывая тот факт, что каждый запрос может привести к миллионам строк, этот подход очень неэффективен.

Я попробовал распределенный поиск Solr. Я создал третье ядро ​​(называемое Core2) с полями из Core0 и Core1. Я добавил обработчик запросов с атрибутом осколков в третье ядро ​​следующим образом:

<requestHandler name="shard" class="solr.SearchHandler">
   <lst name="defaults">
      <str name="shards">localhost/solr/core0/,localhost/solr/core1/</str>
    </lst>
</requestHandler>

Если я запускаю запрос к этому третьему ядру, он пересылает запрос как в Core0, так и в Core1, и, поскольку ни одно из них не имеет всех полей, одно из них сообщает о «неопределенном поле», а ответ представляет собой сообщение об ошибке неверного запроса.

Любая помощь будет принята с благодарностью.

Обратите внимание, что я не контролирую структуру таблиц базы данных.

Ответы [ 3 ]

2 голосов
/ 17 сентября 2011

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

1 голос
/ 17 сентября 2011

Осколок используется, когда ядро ​​становится сложным и трудным в обращении как единое целое. Ядра будут разбиты на более мелкие куски, и теперь вы можете выполнять поиск по нескольким ядрам. Обычно они имеют одинаковую конфигурацию.

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

Sharding не требует от вас создания нового ядра. Вы можете работать с core0 и core1. Подробнее об этом @ http://wiki.apache.org/solr/DistributedSearch

Также проверьте ограничения с распределенным поиском.

Если производительность разбиения вам не подходит, вы можете создать одно ядро ​​с обоими наборами данных или проверить опцию слияния, которая объединяет ядра в одно ядро.

0 голосов
/ 23 января 2013

Вы можете объединить индексы из разных ядер в новый индекс с помощью CoreAdmin:

http://wiki.apache.org/solr/MergingSolrIndexes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...