У меня два ядра 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, и, поскольку ни одно из них не имеет всех полей, одно из них сообщает о «неопределенном поле», а ответ представляет собой сообщение об ошибке неверного запроса.
Любая помощь будет принята с благодарностью.
Обратите внимание, что я не контролирую структуру таблиц базы данных.