Запрос Edismax в Solr с использованием разных строк для разных полей - PullRequest
0 голосов
/ 05 апреля 2020

Мне может понадобиться несколько советов о том, как обрабатывать определенный межъязыковой поиск с помощью Solr. У меня есть документы на 3 языках (английский sh, немецкий, французский). Для простоты предположим, что это всего лишь два языка (английский sh и немецкий). Документы стандартизированы в том смысле, что они содержат одинаковые части (text_part1 и text_part2), просто язык, на котором они написаны, отличается. Язык документов известен. В моей схеме индекса я использую одно ядро ​​с разными полями для каждого языка.

Для документа на немецком языке индекс будет выглядеть примерно так:

  • text_part1_en: empty
  • text_part2_en: пусто
  • text_part1_de: текст на немецком языке
  • text_part2_de: другой текст на немецком языке

Для документа на английском языке sh это будет наоборот.

Чего я хочу достичь: пользователь, вводящий запрос в Engli sh, должен получить как Engli sh, так и немецкие документы, которые имеют отношение к его поиску. Дополнительные условия:

  • Я хочу, чтобы результаты с попаданиями в text_part1 и text_part2 имели более высокий рейтинг, чем результаты со попаданиями только в одном поле (t ie value> 0).
  • Запросы не будут состоять из отдельных слов, но полные предложения (необходимо остановить удаление слов и частичные совпадения [только несколько слов из предложений] должны быть действительными).
  • Engli sh и немецкие документы должны выводиться в один рейтинг. Мне нужно уметь сравнивать релевантность документа Engli sh с релевантностью немецкого документа.
  • части текста должны оставаться отдельными, я хочу повысить важность (скажем, часть1) поверх другого.

Мой общий подход до сих пор заключался в том, чтобы получить перевод запроса на немецкий язык, отправив его в API перевода. Затем я хочу использовать запрос edismax, поскольку он, кажется, отвечает всем моим требованиям. Проблема в том, что мне не удается найти запрос на немецком языке в полях на немецком языке и запрос на языке Engli sh только на полях на языке Engli sh. Документация Solr edismax гласит, что он поддерживает полный синтаксис синтаксического анализатора запросов Lucene, но я не могу найти способ обращаться к разным полям с разными входами. Я попытался:

q=text_part1_en: (A sentence in English) text_part1_de: (Ein Satz auf Deutsch) text_part2_en: (A sentence in English) text_part2_de: (Ein Satz auf Deutsch)
qf=text_part1_en text_part2_en text_part1_de text_part2_de

Этот синтаксис должен соответствовать тому, что MatsLindh написал в этом потоке . Я пробовал разные версии написания этого q, но что бы я ни делал, Solr всегда ищет полную строку q во всех четырех полях, заданных qf, что полностью портит результат. Я просто делаю ошибки в синтаксисе запроса или вообще возможно сделать то, что я пытаюсь сделать, используя edismax?

Единственная альтернатива, которую я вижу, - это использовать два отдельных поиска edismax. Один на английском sh и один на немецком. Но тогда я не знаю, как объединить результаты. Из того, что я понимаю, результаты двух разных поисков не сопоставимы, верно?

Все источники многоязыкового поиска, с которыми я столкнулся, похоже, связаны со случаем, когда язык запроса неизвестен и должен быть обнаружено, но после этого только результаты на языке запроса релевантны для результатов. Хотя вполне возможно, что я не знаю, что именно искать, из-за недостатка понимания. Я очень новичок в использовании Solr. Буду признателен за любую оказанную помощь. Я использую Solr 8.2.0.

...