У меня есть 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)? Или мой многоязычный подход неверен?
stopwords
файл? - person alexf   schedule 19.06.2015