SOLR的非英语语言同义词过滤器工厂

时间:2015-02-11 11:01:54

标签: search solr lucene tomcat7 multilingual

我一直在尝试使用synonym.txt文件和SOLR Lucene开箱即用的SynonymFilterFactory,印度语言(印地语用于POC),但它似乎不适用于英语。< BR />

在堆栈溢出处找到this这引发了一个类似的问题但尚无解决方案。

我已经处理以下事项以支持SOLR的印度语搜索,
1.将浏览器编码更改为UTF-8
2.在Acapche Tomcat Server的server.xml中添加了URIEncodings = UTF-8。

对于POC,我尝试了以下几点,
1.创建一个新的字段类型以支持印地语索引,

<fieldType name="text_hi" class="solr.TextField" positionIncrementGap="100">
  <analyzer> 
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <!-- normalizes unicode representation -->
    <filter class="solr.IndicNormalizationFilterFactory"/>
    <!-- normalizes variation in spelling -->
    <filter class="solr.HindiNormalizationFilterFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hi.txt" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.HindiStemFilterFactory"/>
  </analyzer>
</fieldType>

更新 在经过@Mysterion和@Alexandre Rafalovitch在这篇文章中的回复后,我也尝试删除词干,

<fieldtype name="text_hi_rev" class="solr.TextField" positionIncrementGap="100">
<analyzer>
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" tokenizerFactory="solr.WhitespaceTokenizerFactory"/>
</analyzer>

  1. 根据创建的字段类型

    定义新字段

  2. 在synonyms.txt文件中添加以下行,

    india,bharat,भारत,हिन्दुस्तान,hindustan

  3. 将以下字符串编入索引作为不同的文档,

    मैंभारतकारहनेवालाहूँ strongैहिसंदुस्तानकारहनेवालाहूँ strongै india कारहनेवालाहूँ strongै hindustan कारहनेहूँ strongै bharat काररनेहूँ

  4. 预期行为
    当我搜索任何关键字 india,bharat,भारत,हिन्दुस्तान,hindustan 时,我应该获得在步骤4中索引的所有文件

    实际行为
    1.使用关键字 india,hindustan或bharat 进行搜索时,我会得到以下结果:
    strongै india कारहनेवालाहूँ strongै hindustan कारहनेहूँ <ै bharat कारहनेहूँ

    1. 使用भारत进行搜索仅返回带有भारत的文档,并且与 的हिसंदुस्तान
    2. 如果我正在尝试甚至可能的任何指针?如果可能的话,我在这里可能做错了什么?

      感谢。

1 个答案:

答案 0 :(得分:1)

经过很多令人沮丧的时间和@Mysterion的帮助后,我偶然发现了解决方案。以下是导致决议的两个步骤,

  1. 根据@Mysterion的建议,交换了同义词和词干过滤器。同义词过滤器应该在堵塞过滤器之前。

    2.转出,synonym.txt文件没有使用正确的编码。我在记事本中打开文件,并用UTF-8编码保存。

  2. 重新启动solr。重新启动tomcat。

  3. 添加了新文件。

    5.Eureka!