我在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.”的查询则不会返回任何结果。
我做错了什么?
2条答案
按热度按时间baubqpgj1#
好吧,我相信我想通了,现在看起来正按我想要的方式工作。
我用ClassicTokenizerFactory替换了StandardTokenizerFactory,并在链中添加了ClassicFilterFactory。最终结果是,我得到了去掉句点的令牌,这似乎是可行的。
下面是我对text_general的更新定义:
0s0u357o2#
您需要让同义词过滤器知道使用什么标记器来标记输入文本: