搜索Solr停止词

时间:2013-01-06 05:31:09

标签: solr solr-schema

在我的solr字段中配置了以下manned,

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

这适用于我不想要阻止的情况,但现在有另一个用例导致问题,人们开始寻找以下组合,

  • 常春藤:在这种情况下,只有常春藤才会返回结果,而预期的结果将是。我知道这是因为停止词,但是实现这一点的方法。例如,如果他们在引号内搜索“常春藤”,那么它应该起作用。

  • (妈妈和我)或(“妈妈和我”):在这种情况下也是&amp;被删除或在声明的某些部分包括妈妈和我的结果都会被退回。

如果只有新数据以正确的方式运行但无法重新索引,我很好。另外,更改schema.xml文件会触发完全复制吗?

的问候,
AYUSH

1 个答案:

答案 0 :(得分:0)

您正在使用空白区域标记器。 所以“常春藤”被分成两个字。

你可以使用一个不那么激进的标记化,然后使用WordDelimiterFilterFactory来激活protected="protwords.txt"选项,你可以将“常春藤”设置为受保护的单词,这样solr就不会将其标记为

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