[英]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.