2013-08-26 3 views
2

Что нам нужно похож на то, что обсуждается здесь, за исключением того, не в качестве фильтра , но в качестве фактического запроса: http://lucene.472066.n3.nabble.com/filter-query-from-external-list-of-Solr-unique-IDs-td1709060.htmlпоиска SOLR внешних полями

Мы хотели бы реализовать запрос парсер/бомбардир, который будет позволяют нам комбинировать Поиск SOLR с поиском внешних полей. Это связано с ограничением необходимости обновления целого документа, хотя необходимо обновить только поле в документе .

Например, у нас есть таблица базы данных, называемая document_attributes, содержащая два столбца document_id, attribute_id. Документ_ид соответствует идентификатору индексированных документов - SOLR.

Мы хотели бы, чтобы быть в состоянии передать в запросе, как:

attribute_id: 123 ИЛИ текст: some_query (attribute_id: 123 ИЛИ attribute_id: 456) И текст: some_query и т.д ...

Можем ли мы реализовать плагин/модуль в SOLR, который сможет проанализировать вышеописанный запрос , а затем извлечь атрибуты document_id, связанные с атрибутом_ид и , объединить результаты с нормальной обработкой поиска SOLR, чтобы вернуть один набор результатов для всего . запрос.

Мы будем благодарны за любые рекомендации относительно того, как это реализовать, если это возможно.

ответ

0

Я бы повторил совет, предложенный указанным вопросом, с квалификацией.

Для Solr < 4.0 два подхода для рассмотрения являются:

  • Выполнение поиск DocumentID перед тем запрашивая Solr и запрашивая Solr со списком идентификаторов документов (например, fq=(docid:1 OR docid:5))

  • Создание Вашего собственный производный SolrQueryParser, который выполняет запрос базы данных для замены идентификаторов документов для идентификаторов атрибутов (eq fq=attribute:1 разворачивается с помощью queryparser до fq=(docid:1 OR docid:5))

Решение должно вращаться вокруг количества идентификаторов документов, которые вы будете отправлять в Solr. Для небольших или умеренных (скажем, сотен) идентификаторов документов, тогда отправка идентификаторов в качестве фильтра filterQuery, скорее всего, будет лучшим способом. Если вы потенциально отправляете большое или очень большое количество документов, то расширение запроса на ваш случай является справедливой стратегией. Если вы расширите синтаксический анализатор запросов, вы можете захотеть запустить его на специальном обработчике запросов (не по умолчанию) и создать такие аспекты, как кеширование, чтобы гарантировать, что ваши результаты остаются хитрованными.

Для Solr 4.0 и выше вы также можете рассмотреть возможность использования cross-core join. Возможно, ваше существующее ядро ​​Solr останется как есть, и создайте новое ядро, которое индексирует отношения document: attribute. Это должно облегчить вашу озабоченность по поводу всего обновления документа и позволить вам выполнить весь ваш запрос в Solr в памяти.

Смежные вопросы