У меня есть поле 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