我在模式中的当前字段类型当前被定义为仅进行完全匹配;
<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?
还有其他想法吗?
答案 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