Поиск стоп-слов Solr

Одно из моих полей solr настроено следующим образом:

<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>

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

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

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

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

С уважением,
Аюш


person Cool Techie    schedule 06.01.2013    source источник


Ответы (1)


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

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

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

person The Bndr    schedule 06.01.2013