#search #solr #multicore #multilingual
#Поиск #solr #многоядерный #многоязычный
Вопрос:
У меня есть экземпляр Solr, который получает и индексирует данные о компаниях из базы данных. Данные базы данных об одной компании могут быть предоставлены на нескольких языках (например, на английском и русском).У всех компаний, конечно, есть уникальный ключ, который также является уникальным ключом в индексе solr. Мне нужно представить поиск solr на всех языках одновременно.
Как это можно выполнить? 1. Многоядерный? Я создал два отдельных ядра с данными каждого языка, но я не могу выполнять поиск по двум индексам одновременно.
localhost:8983/solr/core0/select?shards=localhost:8983/solr/core0/,localhost:8983/solr/core1/amp;indent=trueamp;q=*:*amp;distributed=true
или
localhost:8983/solr/core0/select?shards=localhost:8983/solr/core0/,localhost:8983/solr/core1/amp;indent=trueamp;id:123456
результатов не дает. пока поиск в каждом ядре успешен.
- Включить поле имени (например) в качестве многозначного не является решением, поскольку данные на разных языках из базы данных получаются разными процедурами. И значение просто переписывается.
Ответ №1:
Я не уверен насчет многоядерной части, но рассматривали ли вы возможность создания двух полей в одном ядре — по одному для каждого языка? Затем вы могли бы объединить с «ИЛИ», который используется по умолчанию, поэтому запрос для:
en:"query test here" OR ru:"query test here"
был бы примером
Комментарии:
1. но как тогда поместить эти данные в индекс? потому что у меня есть две разные процедуры для извлечения данных из БД…
2. они представляют собой хранимые процедуры и извлекают все данные как один результирующий набор.
3. Да, это сложно. Одна из идей состоит в том, чтобы сохранить значения всех необходимых вам полей, извлекать их при индексации, объединять ваши новые значения с сохраненными и повторно вставлять оба.
4. Вы знаете язык ввода? Тогда вам повезло. Если вы не хотите этого знать: добавьте все языковые поля в одну схему и в свои конфигурации dismax. SOLR обработает ввод для каждого языкового поля в соответствии с его цепочкой запросов, и вам не придется беспокоиться об этом. Чем больше усилий вы приложите к процессу импорта, тем меньше будет мешать вам при выполнении запросов. Вы хотите получить запрос типа: /solr/dismax?q=»ввод на любом языке», и при таком подходе вы можете.
Ответ №2:
Похоже, вы, возможно, используете DataImportHandler для загрузки ваших данных. Вы можете реализовать ответ @Mike Sokolov или реализовать многозначное решение с помощью клиента Solr. Вам нужно будет написать некоторый пользовательский код в клиенте, таком как SolrJ (или одном из других клиентов, перечисленных в IntegratingSolr в Solr Wiki), чтобы извлекать оба языка в отдельных запросах из вашей базы данных, а затем анализировать данные из обоих результатов в общий набор данных / результатов, который можно преобразовать в единыйДокумент Solr.