Запрос Edismax в Solr с использованием разных строк для разных полей

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


person Community    schedule 05.04.2020    source источник
comment
Пробовали ли вы удалить параметр qf, так как вы не хотите выполнять запросы к этим полям? Кроме того, будьте осторожны с использованием пробелов - синтаксис field:<value> - пробел может отбросить его, и вместо этого поле используется как термин. Кроме того, если вы хотите сделать это поиском по фразе, используйте field1:"value1 value2", возможно, вы захотите, чтобы вы ищете   -  person MatsLindh    schedule 06.04.2020
comment
Когда я отбрасываю параметр qf, вообще никаких результатов не будет. Я предполагаю, что в этом случае не будет выполняться поиск поля или только поля по умолчанию. Есть ли способ написать тот же запрос без использования пробелов? Насколько я понимаю, поиск по фразе - это не то, чем я хочу заниматься. Сходство текста с точки зрения общих слов важнее, чем фиксированные фразы.   -  person    schedule 06.04.2020