Search 如何在solr查询中忽略空白
我将名称Search 如何在solr查询中忽略空白,search,solr,lucene,Search,Solr,Lucene,我将名称Audioslave编入Solr的索引,并希望将该文档与查询字符串Audioslave匹配 我已配置以下规则: <fieldType name="text_filter" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.KeywordTokenizerFactory" /> <fi
Audioslave
编入Solr的索引,并希望将该文档与查询字符串Audioslave
匹配
我已配置以下规则:
<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分析工具时,一切看起来都很好
查询部分如下所示:
- 关键字TokenizerFactory生成
音频从站
- 然后WordDelimiterFilterFactory将其拆分为
、音频从属设备
、音频从属设备
和音频从属设备
(让我们从这里使用第三列(从属设备
)音频从属设备
- TrimFilterFactory将其保留为
AudioSlave
- 最后,小写的FilterFactory将其更改为
audioslave
- 关键字TokenizerFactory生成
Audioslave
- 然后WordDelimiterFilterFactory和TrimFilterFactory将其保留为
Audioslave
- 最后,小写的FilterFactory将其更改为
audioslave
http://localhost:8983/solr/search_api/select?defType=edismax&fq=type:Artist&q=Audio%20slave&qf=artist_name_filter&wt=json
您的问题不在于分析,而在于QueryParser语法。空格用于分隔查询子句,这不受分析器的影响。当您有q=Audio slave
时,它会应用查询语法首先规则,并将其分为“音频”和“从属”两个子句,然后分别分析每个子句
我相信,逃离空间应该可以完成任务:q=Audio\slave
这里的短语查询似乎应该可以工作,例如
q=“Audio slave”
,但它不能工作。它为我生成了类似的内容:“(Audio slave audioslave)slave”
,这是有问题的。尝试使用WhitespaceTokenizerFactory
作为索引部分的标记器。
这里的KeywordTokenizerFactory
保持文本的原样……它不会创建任何标记
将其替换为WhitespaceTokenizerFactory
。
WhitespaceTokenizerFactory
将在空间中创建标记。他们的分析使用WordDelimiterFilter
来创建单独的标记,而不是标记器。