SOLR: одновременный поиск на разных языках

#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. Включить поле имени (например) в качестве многозначного не является решением, поскольку данные на разных языках из базы данных получаются разными процедурами. И значение просто переписывается.

Ответ №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.