Запросы eDismax со стоп-словами и полями для конкретных языков

У меня есть 3 текстовых поля:

  • content_ru
  • content_sp
  • content_fr

Каждое из вышеперечисленных полей имеет свой набор анализаторов, токенизаторов и фильтров. У них также есть собственный набор стоп-слов.

Я использую LangIdentifierProcessor (https://cwiki.apache.org/confluence/display/solr/Detecting+Languages+During+Indexing), чтобы определить, на каком языке находится проиндексированный документ, и Solr запишет содержимое этого документа в правильное поле.

Наконец, я использую парсер eDisMax, обрабатывающий запросы. Мои параметры qf сопоставляются с 3 полями выше, а параметр mm установлен на 100%.

Вот моя проблема: когда я выполняю поиск по запросу «Желтый дом», Solr возвращает все документы с терминами Желтый и Дом. Здорово. Теперь, когда я запрашиваю «Желтый дом», я ничего не получу в ответ. После отладки в течение некоторого времени я обнаружил, что Solr создает запрос, аналогичный следующему для «Желтого дома»: +((content_sp:the | content_fr:the)(content_en:yellow | content_sp: желтый | content_fr:желтый)(content_en:house | content_sp:house | content_fr:house))

Помните, что я установил mm на 100%, что означает, что все термины должны быть найдены в документе, который нужно вернуть. Поскольку термин 'the' является стоп-словом для моего английского поля, Solr не включает его в запрос к полю content_en, однако он включает его в запрос для двух других моих полей, которые явно потерпит неудачу, поскольку в этих полях не будет ничего для английских документов. (Из-за LangIdProcessor, описанного в ссылке выше).

Теперь - в качестве быстрого исправления я полагаю, что могу перечислить все свои стоп-слова в один файл, однако это неправильно. Я также знаю, что могу указать свои поля qf с каждым запросом, что позволит мне определить язык запроса, а затем указать поля для поиска. Но могу ли я что-то сделать в Solr, чтобы указать это (может быть, какой-то SearchComponent)? Или мой многоязычный подход неверен?


person Tim Cardwell    schedule 18.06.2015    source источник
comment
Во время запроса вы не применяете stopwords файл?   -  person alexf    schedule 19.06.2015
comment
@alexf - к этим полям применяется как анализатор времени индекса, так и анализатор времени запроса, однако у каждого языка есть свой набор стоп-слов. Должен ли файл стоп-слов, используемый в моем анализаторе запросов, содержать исчерпывающий список стоп-слов для всех языков? Или вы ссылаетесь на другой подход к применению стоп-слов во время запроса?   -  person Tim Cardwell    schedule 20.06.2015


Ответы (1)