我在ubuntu 12.04 LTS上有solr v4.8.0。
我在schema. xml中有过滤solr.SynonymFilterFactory的字段。
<fieldType name="text_ru" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ru.txt" format="snowball" />
<filter class="solr.SnowballPorterFilterFactory" language="Russian"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
</analyzer>
</fieldType>
我有下一张地图
spidermen, superman, batman, бетмен, бетмэн, спайдермен, спайдермэн, супермен, супермэн, spiderman
我检查了“synonmes. txt”文件的编码,它是utf-8。
英语同义词的查询工作得很好。我只对俄语同义词有问题,它们不起作用,索尔忽略了它们。我自己无法处理这个问题。
我在30分钟后补充道:不知何故,: "бетмэн", "спайдермэн" 在搜索结果中找到了,但 "бетмен", "спайдермен" 没有。
尝试交换同义词和搬运工过滤器的顺序。事实上,您在切断单词结尾后正在查看同义词文件。可能只是不匹配。
管理WebUI中的分析屏幕是一个很好的工具,可以查看文本在通过各个过滤器时发生了什么。
我刚刚为这个案例写了一个小测试——我发现,词干是导致这个问题的原因。当我禁用它时——一切都很顺利,用同义词交换它也有帮助。
参考测试-https://github.com/MysterionRise/information-retrieval-adventure/blob/master/lucene5/src/main/scala/org/mystic/SynonymsAndStopwords.scala