Solr - странные проблемы при использовании синонимов и стоп-слов вместе - PullRequest
0 голосов
/ 20 марта 2020

У меня есть поле title в моей схеме solr:

<field name="title" type="text_en" termVectors="true" indexed="true" required="true" stored="true" />

text_en определяется следующим образом:

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100" docValues="false" multiValued="false">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory" />
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" />
        <filter class="solr.LowerCaseFilterFactory" />
        <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true" />
        <filter class="solr.PorterStemFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory" />
        <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms_en.txt" ignoreCase="true" expand="true" />
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" />
        <filter class="solr.LowerCaseFilterFactory" />
        <filter class="solr.PorterStemFilterFactory" />
    </analyzer>
</fieldType>

Я встречается странное поведение при использовании многозначных синонимов, которые содержат стоп-слова.

Если стоп-слова появляются в середине, это работает нормально. Например, если в моем файле синонимов есть следующее (где i - стоп-слово):

iphone, apple i phone

И если я сделаю запрос: /select?q=iphone&qf=title&defType=edismax

Анализируемый запрос: +DisjunctionMaxQuery(((((+title:appl +title:phone) title:iphon))))

То же самое для запроса: /select?q=apple i phone&qf=title&defType=edismax

Но если стоп-слова появляются в начале или в конце, то поведение непредсказуемо.

В В большинстве случаев весь синоним удаляется. Например, если я изменю свой файл синонимов на:

iphone, i phone

и снова выполню тот же запрос (с iphone), я получу:

+DisjunctionMaxQuery(((title:iphon)))

Я ожидал iphon и phone (так как i будет отброшено) в моем запросе dismax.

В некоторых случаях поведение становится еще более странным.

Например, если мой файл синонимов:

between two ferns,netflix comedy,zach galifianakis show,netflix 2019 best

и у меня есть ferns и best в качестве стоп-слов. Если я сделаю следующий запрос:

/select?q=netflix comedy&qf=title&defType=edismax

я получу это:

+DisjunctionMaxQuery((((+title:between +title:two +title:galifianaki +title:show) (+title:netflix +title:2019 +title:comedi))))

, которые являются довольно странными комбинациями.

Я не могу понять это поведение и не нашел ничего связанного с этим в документации или inte rnet. Может быть, я что-то упустил. Любая помощь / указатели высоко ценится.

Версия Solr: 8.4.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...