我在ubuntu 12.04 LTS上有solr v4.8.0。
我在架构中有字段.xml带有过滤器 solr。同义词过滤器工厂。
<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
我检查了"同义词.txt"文件的编码,它是utf-8。
带有英语同义词的查询工作正常。我只对俄语同义词有问题,它们不起作用,solr 忽略它们。我自己无法解决问题。
我在 30 分钟后添加:不知何故,在搜索结果中找到了单词:"бетмэн","спайдермэн",但"бетмен","спайдермен"没有。
尝试交换同义词和波特过滤器的顺序。实际上,您在砍掉单词的结尾后正在查找同义词文件。可能只是不匹配。
管理 Web UI 中的"分析"屏幕是一个很好的工具,用于查看文本在通过各个筛选器时会发生什么情况。
我刚刚为这种情况写了一个小测试 - 我发现,词干是导致此问题的原因。当我禁用它时 - 一切顺利,也用同义词帮助交换它。
参考测试 - https://github.com/MysterionRise/information-retrieval-adventure/blob/master/lucene5/src/main/scala/org/mystic/SynonymsAndStopwords.scala