solr同义词不起作用

时间:2013-09-13 15:40:22

标签: solr synonym

我在使用SOLR获取新同义词方面遇到了一些困难。奇怪的是sysnonyms.txt文件中的分发工作附带的样本条目。我添加的任何新内容都没有。

例如,synonyms.txt有以下示例:

  

GB,导板,千兆字节,千兆字节

然后我使用上述条款之一查询现场呼叫“主题”。

  

主题:GB

     

主题:凹形板

     

等...

无论我在查询中使用哪个术语,我都会得到与预期相同的结果集。

接下来,我将以下行添加到synonyms.txt:

  

ibm,i.b.m。,国际商业机器

我确保在schema.xml中,fieldtype text_general(字段“subject”使用的字段类型)为索引启用了SynonymFilterFactory,如下所示:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

最后,由于我的数据在mysql数据库中,然后我使用dataimport重新导入所有数据,假设这是我需要做的重新索引。

但是,当查询主题:ibm“返回多个结果时,对”subject:i.b.m。“的查询不会返回任何内容。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

好的,我相信我已经弄明白了,现在它似乎按照我的意图运作。

我将StandardTokenizerFactory替换为ClassicTokenizerFactory,并将ClassicFilterFactory添加到链中。最终的结果是我最终得到了剥离周期的令牌,这似乎有效。

所以,这是我对text_general的更新定义:

    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.ClassicTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ClassicFilterFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.ClassicTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ClassicFilterFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    </analyzer>
</fieldType>

答案 1 :(得分:0)

您需要让同义词过滤器知道用于标记输入文本的标记器:

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <!--- ... -->
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" tokenizerFactory="solr.StandardTokenizerFactory"/>
    <!--- ... -->
  </analyzer>
</fieldType>