我的SOLR配置中有以下字段:
<fieldType name="title" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" preserveOriginal="1" catenateAll="1" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
在我可以存储的字段中:
蜘蛛侠,蜘蛛侠,蜘蛛侠
我想要的是搜索蜘蛛侠获得所有3个选项的人,最理想的是搜索蜘蛛侠以获得所有3个选项的人。除了在索引内容时修改内容还有另一种方法可以有效地忽略特殊字符但不一定要分割它们吗?
答案 0 :(得分:-1)
其中一个可能的解决方案,特别是如果分隔符字符数很小,则通过solr.PatternReplaceFilterFactory
替换它们,如下所示:
<fieldType name="title" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="-" replacement=""/>
<filter class="solr.PatternReplaceFilterFactory" pattern=" " replacement=""/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
如果关键字标记符是一个不好的选项,因为它会保留一个标记(对于像标题这样的字段可能没问题),你可以创建自己的标记生成器,它只会在所需的符号上拆分标题或添加其他过滤器,如ngram允许在标题字段上进行部分匹配。
答案 1 :(得分:-1)
我知道这是一篇过时的文章,但是正确的答案是您应该将“蜘蛛侠,蜘蛛侠,蜘蛛侠”添加到您的onymous.txt文件中,然后重新启动solr。如果仍然无法解决问题,请确保您的架构使用SynonymGraphFilterFactory分析器。您在这里描述的是同义词。