【问题标题】:Don't split on underscore with solr.StandardTokenizerFactory不要使用 solr.StandardTokenizerFactory 在下划线上拆分
【发布时间】:2013-03-20 17:58:29
【问题描述】:
我正在使用 solr,我在文本字段中使用 StandardTokenizerFactory,但我不想在下划线上拆分。
我是否必须使用像 PatternTokenizerFactory 这样的另一个标记器,或者我可以使用 StandardTokenizerFactory 来做到这一点?因为我需要 StandardTokenizerFactory 的相同功能,但下划线没有拆分。
【问题讨论】:
标签:
ruby-on-rails-3
solr
sunspot
sunspot-rails
sunspot-solr
【解决方案1】:
我认为您不能在 StandardTokenizerFactory 中做到这一点。一种解决方案是首先将下划线替换为 StandardTokenizerFactory 不会处理的内容以及您的文档不会包含的内容。例如,您可以先用PatternReplaceCharFilterFactory 将_ 替换为QQ,然后通过StandardTokenizerFactory,然后使用PatternReplaceFilterFactory 将QQ 替换为_。这是执行此操作的 fieldType 定义:
<fieldType name="text_std_prot" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<charFilter class="solr.PatternReplaceCharFilterFactory"
pattern="_"
replacement="QQ"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.PatternReplaceFilterFactory"
pattern="QQ"
replacement="_"/>
...
</analyzer>
</fieldType>
这里是发生了什么的屏幕截图:
【解决方案2】:
添加以下似乎对 StandardTokenizerFactory 有用,因为 StandardTokenizerFactory 在连字符“-”处拆分。
<charFilter class="solr.PatternReplaceCharFilterFactory"
pattern="_"
replacement="-"/>
<tokenizer class="solr.StandardTokenizerFactory"/>