Solr 4.7使用'solr.EdgeNGramFilterFactory'突出显示问题

时间:2018-03-27 15:30:26

标签: solr

有人可以帮我突出我搜索“汽车”时遇到的问题,它突出了“汽车”,“汽车”的预期行为,以及所有以汽车开头的字样,例如“卡片”,运营商等。

用户要求我们不想突出显示以'car'开头的任何内容?这是我的schema.xml

<analyzer type="index">
       <charFilter class="solr.PatternReplaceCharFilterFactory" 
                pattern="[({.,\[\]})]" replacement=" "/>
   <tokenizer class="solr.WhitespaceTokenizerFactory"/>
   <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
   <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
   <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" preserveOriginal="1"  catenateAll="1"  />
   <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
   <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15"/>
   <filter class="solr.SnowballPorterFilterFactory" language="English" />

1 个答案:

答案 0 :(得分:1)

问题在于,当您使用edgengramfilter为cards建立索引时,您会获得令牌ccacarcard和{ {1}}。当您正在搜索cards时,该字段具有相同的edgengramfilter cars c ll search for any document matching any of the tokens ca , car {{ 1}} cars`。

解决方案是在索引时删除edgengramfilter(这样就不会对,, andc产生影响,或者使用其他字段进行突出显示(使用ca)只应用了标准的标记化/空白标记化,以及可能的一个词干分析器(我会使用car来删除多个指示符)。