我正在使用solr进行搜索。当我搜索一个包含中大写字母的单词时
描述,它没有显示任何结果。但它给出了小写字母的结果。。
例如:如果我的查询是q=description:*stack*,我会得到结果。但如果查询是
q=描述:*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>
我也想用大写字母搜索。。
有人能帮我吗?
查看Solr wiki。上面写着:
将此筛选器添加到索引分析器,但不添加到查询分析器。
更改模式以反映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
也是如此。看看这里了解更多:
Solr不分析其中包含通配符的查询。是的,这个意味着过滤器LowerCaseFilterFactory在索引期间,将Stack转换为堆栈,但在进行查询时不会发生这种情况,尽管过滤器定义正确。这就是为什么你不获取任何搜索结果。
在我看来,最简单的解决方案是在将查询发送到Solr之前,在客户端使查询小写。您还应该考虑ASCIIFoldingFilterFactory
也没有被激发。你真的需要它吗?