Мне может понадобиться совет о том, как обрабатывать конкретный межъязыковой поиск с помощью Solr. Имею документы на 3-х языках (английский, немецкий, французский). Для простоты предположим, что это всего два языка (английский и немецкий). Документы стандартизированы в том смысле, что содержат одни и те же части (text_part1 и text_part2), различается только язык, на котором они написаны. Язык документов известен. В моей схеме индекса я использую одно ядро с разными полями для каждого языка.
Для немецкого документа индекс будет выглядеть примерно так:
- text_part1_en: пусто
- text_part2_en: пусто
- text_part1_de: текст на немецком языке
- text_part2_de: Еще один немецкий текст
Для английского документа будет наоборот.
Чего я хочу добиться: пользователь, вводящий запрос на английском языке, должен получить документы на английском и немецком языках, которые имеют отношение к его поиску. Дальнейшие условия:
- Я хочу, чтобы результаты с попаданиями в text_part1 и text_part2 имели более высокий рейтинг, чем результаты с попаданиями только в одно поле (значение связи > 0).
- Запросы будут состоять не из отдельных слов, а из полных предложений (необходимо удаление стоп-слов и частичные совпадения [только несколько слов из предложений] должны быть действительными).
- Английские и немецкие документы должны выводиться в один рейтинг. Мне нужно иметь возможность сравнить релевантность английского документа с релевантностью немецкого документа.
- текстовые части должны оставаться отдельными, я хочу повысить важность (скажем, части 1) по сравнению с другими.
До сих пор мой общий подход заключался в том, чтобы получить немецкий перевод запроса пользователя, отправив его в API перевода. Затем я хочу использовать запрос edismax, поскольку он, похоже, соответствует всем моим требованиям. Проблема в том, что мне не удается найти немецкий запрос в полях на немецком языке и запрос на английском только в полях на английском языке. В документации 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 в этом -solr">поток. Я пробовал разные варианты написания этого q, но что бы я ни делал, Solr всегда ищет полную строку q во всех четырех полях, заданных qf, что полностью искажает результат. Я просто делаю ошибки в синтаксисе запроса или вообще возможно сделать то, что я пытаюсь сделать, используя edismax?
Единственная альтернатива, которую я вижу, — использовать два отдельных поиска edismax. Один на английском и один на немецком. Но тогда я не знаю, как объединить результаты. Насколько я понимаю, результаты двух разных поисков несопоставимы, верно?
Все источники о многоязычном поиске, с которыми я сталкивался, похоже, касаются случая, когда язык запроса неизвестен и его необходимо определить, но впоследствии для результатов релевантны только документы на языке запроса. Хотя вполне возможно, что я не знаю, что именно искать из-за непонимания. Я очень новичок в использовании Solr. Буду признателен за любую оказанную помощь. Я использую Solr 8.2.0.
qf
, так как вы не хотите выполнять запросы к этим полям? Кроме того, будьте осторожны с использованием пробелов - синтаксисfield:<value>
- пробел может отбросить его, и вместо этого поле используется как термин. Кроме того, если вы хотите сделать это поиском по фразе, используйтеfield1:"value1 value2"
, возможно, вы захотите, чтобы вы ищете - person MatsLindh   schedule 06.04.2020