Поиск Solr Stop слов

Одно из моих полей настраивается в следующем,

<fieldType name="text_exact" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
 <analyzer type="index">
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1" types="wdfftypes.txt"/>
    <filter class="solr.LowerCaseFilterFactory"/>
 </analyzer>
 <analyzer type="query">
   <tokenizer class="solr.WhitespaceTokenizerFactory"/>
   <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
   <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1" types="wdfftypes.txt"/>
   <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

Это работает в тех случаях, когда я не хочу останавливаться, но теперь есть другой вариант использования, который вызывает проблему, люди начинают искать следующие комбинации,

  • Плющ: в этом случае результаты с плющом возвращаются, когда ожидаемый результат будет с. Я понимаю, что это из-за стоп-слова, но это способ достичь этого. Например, если они ищут "плющ" в кавычках, это должно сработать.

  • (Mom & Me) ИЛИ ("мама и я"): В этом случае также & отбрасывается или возвращаются результаты, включающие и маму, и меня в некоторой части утверждения.

Я в порядке, если только новые данные ведут себя правильно, но не смогут переиндексировать. Кроме того, изменение файла schema.xml приведет к полной репликации?

С Уважением,
Ayush

1 ответ

Вы используете токенизатор пробелов. Итак, "Плющ" разрезан на 2 слова.

Вы можете использовать менее агрессивный токениз с последующим WordDelimiterFilterFactory для того, чтобы активировать protected="protwords.txt" параметры, где вы можете установить "плющ" в качестве защищенного слова, так что Solr не будет маркировать это.

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters

Другие вопросы по тегам