使用solr从段落中搜索一个大写字母的单词


Searching a word having capital letters from a paragraph using solr

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

此外,不会为您的查询激发LowerCaseFilterFactoryS在解析的查询中不小写)。ASCIIFoldingFilterFactory也是如此。看看这里了解更多:

Solr不分析其中包含通配符的查询。是的,这个意味着过滤器LowerCaseFilterFactory在索引期间,将Stack转换为堆栈,但在进行查询时不会发生这种情况,尽管过滤器定义正确。这就是为什么你不获取任何搜索结果。

在我看来,最简单的解决方案是在将查询发送到Solr之前,在客户端使查询小写。您还应该考虑ASCIIFoldingFilterFactory也没有被激发。你真的需要它吗?