Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用solr从段落中搜索具有大写字母的单词_Php_Solr - Fatal编程技术网

Php 使用solr从段落中搜索具有大写字母的单词

Php 使用solr从段落中搜索具有大写字母的单词,php,solr,Php,Solr,我正在使用solr进行搜索。当我搜索一个包含来自的大写字母的单词时 说明,它没有显示任何结果。但它给出了小写字母的结果 如果我的查询是q=description:*stack*,我将得到结果。但如果查询是 q=description:*Stack*,即使description包含该单词,它也不会给出任何结果 我的模式包含: <fieldType name="string" class="solr.TextField"> <analyzer type="index">

我正在使用solr进行搜索。当我搜索一个包含来自的大写字母的单词时

说明,它没有显示任何结果。但它给出了小写字母的结果

如果我的查询是q=description:*stack*,我将得到结果。但如果查询是

q=description:*Stack*,即使description包含该单词,它也不会给出任何结果

我的模式包含:

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