我在使用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。“的查询不会返回任何内容。
我做错了什么?
答案 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>