Мне может понадобиться несколько советов о том, как обрабатывать определенный межъязыковой поиск с помощью 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.