繁体   English   中英

Solr同义词不起作用

[英]solr synonym not working

我在获取新的同义词以与SOLR配合使用时遇到了一些困难。 奇怪的是,分发工作随附的sysnonyms.txt文件中的示例条目。 我添加的任何新内容都没有。

例如,inonymous.txt具有以下示例:

GB,gib,千兆字节,千兆字节

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

主题:gb

主题:gib

等等...

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

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

ibm,ibm,国际商务机

并且我确保在schema.xml中,字段类型text_general(字段“主题”使用的字段类型)为索引启用了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重新导入了所有数据。

但是,尽管对subject:ibm“的查询返回了多个结果,但对” subject:ibm“的查询却未返回任何结果。

我究竟做错了什么?

好的,我相信我已经解决了,现在它似乎可以按照我的预期工作。

我用ClassicTokenizerFactory替换了StandardTokenizerFactory,还将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>

您需要让同义词过滤器知道使用什么标记器来标记输入文本:

<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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM