solr 未使用新的同义词

35g0bw71  于 2022-11-05  发布在  Solr
关注(0)|答案(2)|浏览(182)

我在SOLR中使用新的同义词时遇到了一些困难。奇怪的是,发行版附带的sysnonyms.txt文件中的示例条目可以工作,而我添加的任何新条目都不能。
例如,synonyms.txt有以下示例:
GB,gib,千兆字节,千兆字节
然后,我使用上述术语之一查询字段调用“subject”。
主题:英国
主题:gib
等等。
无论我在查询中使用了这些术语中的哪一个,我都会得到与预期相同的结果集。
接下来,我在synonyms.txt中添加了以下行:
国际商用机器公司
我还确保在schema.xml中,字段类型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重新导入了所有数据,假设这就是我需要重新索引的地方。
但是,对subject:ibm”的查询会返回多个结果,而对“subject:i.b.m.”的查询则不会返回任何结果。
我做错了什么?

baubqpgj

baubqpgj1#

好吧,我相信我想通了,现在看起来正按我想要的方式工作。
我用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>
0s0u357o

0s0u357o2#

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

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

相关问题