我正在使用solr进行搜索。当我搜索一个单词时包含来自
的大写字母描述,它没有显示任何结果。但它给出了小写字母的结果..
例如:如果我的查询是q = description:* stack *,我将得到结果。但如果查询是
q = description:* Stack *,即使描述包含该单词
,它也不会给出任何结果我的架构包含:
<fieldType name="string" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.ReversedWildcardFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.ReversedWildcardFilterFactory" />
</analyzer>
</fieldType>
我想用大写字母搜索..
有人可以帮助我吗?
答案 0 :(得分:1)
查看Solr wiki。它说:
将此过滤器添加到索引分析器,但不是查询分析器。
在更改架构后尝试使用debugQuery=on
查询以反映维基说明:
<str name="querystring">text:*Stack*</str>
<str name="parsedquery">text:#1;*kcatS*</str>
正如您所看到的,ReversedWildcardFilterFactory
更改了您的查询,即使它不在您的查询分析器链中,使用如下字段类型:
<fieldType name="text" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ReversedWildcardFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
此外,您的查询未触发LowerCaseFilterFactory
(S
在解析的查询中不小写)。 ASCIIFoldingFilterFactory
也是如此。
看看here了解更多信息:
Solr不会分析存在通配符的查询。是的,这个 表示在索引期间过滤器LowerCaseFilterFactory, 将堆栈转换为堆栈,但在进行查询时,这不会发生,尽管如此 事实上,过滤器是正确定义的。这就是你不这样做的原因 获得任何搜索结果。
我想到的最简单的解决方案是在将查询发送到Solr之前在客户端进行小写查询。您还应该考虑ASCIIFoldingFilterFactory
也不会被解雇。你真的需要吗?