Токенизатор составных слов Solr - результаты обрабатываются как оператор ИЛИ

В голландском и немецком языках есть слова, которые можно комбинировать в новыеслова; составные слова.

Например, «менеджер по работе с клиентами» считается одним словом, составленным из слов «учетная запись» и «менеджер». Наши пользователи будут использовать «менеджер учетных записей» и «менеджер учетных записей» в документах и ​​запросах и ожидают одинаковых результатов для обоих запросов.

Чтобы иметь возможность разлагать(разделять) слова, solr имеет фильтр словаря, который я настроил в схеме:

<filter class="solr.DictionaryCompoundWordTokenFilterFactory" dictionary="../../compound-word-dictionary.txt" minWordSize="8" minSubwordSize="4" maxSubwordSize="15" onlyLongestMatch="true"/>

Файл Compound-word-dictionary.txt содержит список слов, которые используются для разложения сложных слов.В этом списке вы найдете, например, слова «аккаунт» и «менеджер».

Результат разложения в порядке при анализе в отладчике Solr при поиске по запросу «accountmanager»: (текст термина):

  • accountmanager
  • account
  • manager

Этот результат, однако, обрабатывается как оператор ИЛИ и находит все документы, в которых есть хотя бы один термин. Я хочу, чтобы он вел себя как оператор AND (поэтому мне нужны только результаты, которые содержат в документе термины «аккаунт» и «менеджер»).

Я попытался установить для оператора по умолчанию в схеме значение «И», но это игнорируется при использовании edismax. Поэтому я установил для предложенного Min-should-Matchзначение 100% (mm=100%), опять же без какого-либо желаемого результата. Настройка атрибутов фильтра словаря в схеме не меняет поведение на «И».

Кто-нибудь сталкивался с таким поведением при использовании фабрики токенов составных слов словаря и знает решение, позволяющее ему вести себя как оператор AND?

6
задан Sebastiaan Ordelman 18 June 2012 в 09:40
поделиться