【发布时间】:2016-05-10 14:36:05
【问题描述】:
我在 Solr 上有名称 Audioslave 索引,我想将该文档与查询字符串 Audio Slave 匹配。
我配置了以下规则:
<fieldType name="text_filter" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory"
catenateWords="1"
catenateNumbers="1"
catenateAll="1"
preserveOriginal="1"
generateWordParts="1"
generateNumberParts="1"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory"
catenateWords="1"
catenateNumbers="1"
catenateAll="1"
preserveOriginal="1"
generateWordParts="1"
generateNumberParts="1"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
还有一个使用它的字段:
<field name="artist_name_filter" type="text_filter" multiValued="false" indexed="true" stored="true" required="false" />
使用 Solr 分析工具时,一切看起来都很好。
查询部分如下:
- KeywordTokenizerFactory 生成
Audio Slave, - 然后 WordDelimiterFilterFactory 将其拆分为
Audio Slave、Audio、AudioSlave和Slave(让我们只使用此处的第三列 (AudioSlave)。 - TrimFilterFactory 将其保留为
AudioSlave - 最后将LowerCaseFilterFactory改成
audioslave
另一方面,索引部分是:
- KeywordTokenizerFactory 生成
Audioslave, - 然后 WordDelimiterFilterFactory 和 TrimFilterFactory 将其保持为
Audioslave - 最后将LowerCaseFilterFactory改成
audioslave
所以两个字段应该匹配,但是查询没有返回结果:
http://localhost:8983/solr/search_api/select?defType=edismax&fq=type:Artist&q=Audio%20slave&qf=artist_name_filter&wt=json
【问题讨论】: