Solr中没有特殊字符的完全匹配

时间:2015-02-24 20:08:30

标签: solr

我在模式中的当前字段类型当前被定义为仅进行完全匹配;

<fieldType name="text_exact" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
         <tokenizer class="solr.KeywordTokenizerFactory"/>
         <filter class="solr.LowerCaseFilterFactory"/>
         <filter class="solr.TrimFilterFactory"/>
      </analyzer>
      <analyzer type="query">
         <tokenizer class="solr.KeywordTokenizerFactory"/>
         <filter class="solr.LowerCaseFilterFactory"/>
         <filter class="solr.TrimFilterFactory"/>
      </analyzer>
   </fieldType>

现在,我希望实现完全匹配,但在索引编制期间会删除特殊字符。

我读到使用StandardTokenizerFactory将删除特殊字符。但是,我不希望它在白色空格上分割短语的副作用。

是否可以在索引期间执行StandardTokenizerFactory,然后在查询中使用KeywordTokenizerFactory?

还有其他想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用Solr的CharFilterFactories,可能适合您的工厂:

solr.HTMLStripCharFilterFactory :它会删除所有html特殊字符,例如&lt;,&gt;,&amp;等等。

solr.PatternReplaceCharFilterFactory :它会替换所有字符,你可以像regexp一样使用它:

<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="([^a-z])" replacement=""/>

它将删除所有非字母字符,与此类似,您可以删除所有特殊字符。

了解更多信息 - https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#CharFilterFactories