使用solr搜索段落中包含大写字母的单词

时间:2012-02-21 06:18:53

标签: php solr

我正在使用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>

我想用大写字母搜索..

有人可以帮助我吗?

1 个答案:

答案 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>

此外,您的查询未触发LowerCaseFilterFactoryS在解析的查询中不小写)。 ASCIIFoldingFilterFactory也是如此。 看看here了解更多信息:

  

Solr不会分析存在通配符的查询。是的,这个   表示在索引期间过滤器LowerCaseFilterFactory,   将堆栈转换为堆栈,但在进行查询时,这不会发生,尽管如此   事实上,过滤器是正确定义的。这就是你不这样做的原因   获得任何搜索结果。

我想到的最简单的解决方案是在将查询发送到Solr之前在客户端进行小写查询。您还应该考虑ASCIIFoldingFilterFactory也不会被解雇。你真的需要吗?