Php 使用solr从段落中搜索具有大写字母的单词
我正在使用solr进行搜索。当我搜索一个包含来自的大写字母的单词时 说明,它没有显示任何结果。但它给出了小写字母的结果 如果我的查询是q=description:*stack*,我将得到结果。但如果查询是 q=description:*Stack*,即使description包含该单词,它也不会给出任何结果 我的模式包含:Php 使用solr从段落中搜索具有大写字母的单词,php,solr,Php,Solr,我正在使用solr进行搜索。当我搜索一个包含来自的大写字母的单词时 说明,它没有显示任何结果。但它给出了小写字母的结果 如果我的查询是q=description:*stack*,我将得到结果。但如果查询是 q=description:*Stack*,即使description包含该单词,它也不会给出任何结果 我的模式包含: <fieldType name="string" class="solr.TextField"> <analyzer type="index">
<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>
我还想用大写字母搜索
有人能帮我吗?看一看桌子。它说:
将此筛选器添加到索引分析器,但不添加到查询分析器
更改架构以反映wiki说明后,请尝试使用debugQuery=on
进行查询:
<str name="querystring">text:*Stack*</str>
<str name="parsedquery">text:#1;*kcatS*</str>
此外,不会为您的查询触发LowerCaseFilterFactory
(S
在解析的查询中不是小写的)。ASCIIFoldingFilterFactory
也会发生同样的情况。
查看了解更多信息:
Solr不分析包含通配符的查询。是的,这个
表示在索引期间,筛选器小写为FilterFactory,
将堆栈转换为堆栈,但在进行查询时,这不会发生,尽管
过滤器定义正确的事实。这就是为什么你不这么做
获取任何搜索结果
我想到的最简单的解决方案是,在将查询发送到Solr之前,在客户端将其小写。你也应该考虑到<代码> ASCIIFoldingFilterFactory <代码>也不被触发。你真的需要它吗?你能把你的问题说清楚一点吗?这有效吗?根据SOLR defect tracking(),这个问题在v3.6和4.0中得到了修复。@MikePurcell我的示例显示了
ReversedWildcardFilterFactory
的工作原理:对于通配符查询,不会触发过滤器。我只是解释了为什么它不起作用,并提出了一个潜在的解决方案。我不确定SOLR-2438与ReversedWildcardFilterFactory
有多少关联。OP表示他无法进行区分大小写的通配符搜索,SOLR-2438与此直接相关。我认为解决他的问题的办法是你建议他降低对客户的抱怨。就我个人所知,我只是想确定一下。@MikePurcell是的,唯一的问题是使用ReversedWildcardFilterFactory
会让事情有所不同。在回答之前,我使用问题中提到的字段类型对Solr3.5进行了一些测试。干杯
<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>