Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
Search 如何在solr查询中忽略空白_Search_Solr_Lucene - Fatal编程技术网

Search 如何在solr查询中忽略空白

Search 如何在solr查询中忽略空白,search,solr,lucene,Search,Solr,Lucene,我将名称Audioslave编入Solr的索引,并希望将该文档与查询字符串Audioslave匹配 我已配置以下规则: <fieldType name="text_filter" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.KeywordTokenizerFactory" /> <fi

我将名称
Audioslave
编入Solr的索引,并希望将该文档与查询字符串
Audioslave
匹配

我已配置以下规则:

<fieldType name="text_filter" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory" />
    <filter class="solr.WordDelimiterFilterFactory"
            catenateWords="1"
            catenateNumbers="1"
            catenateAll="1"
            preserveOriginal="1"
            generateWordParts="1"
            generateNumberParts="1"/>
    <filter class="solr.TrimFilterFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory" />
    <filter class="solr.WordDelimiterFilterFactory"
            catenateWords="1"
            catenateNumbers="1"
            catenateAll="1"
            preserveOriginal="1"
            generateWordParts="1"
            generateNumberParts="1"/>
    <filter class="solr.TrimFilterFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
  </analyzer>
</fieldType>

以及使用它的字段:

<field name="artist_name_filter"  type="text_filter"  multiValued="false" indexed="true" stored="true" required="false" />

当使用Solr分析工具时,一切看起来都很好

查询部分如下所示:

  • 关键字TokenizerFactory生成
    音频从站
  • 然后WordDelimiterFilterFactory将其拆分为
    音频从属设备
    音频从属设备
    音频从属设备
    从属设备
    (让我们从这里使用第三列(
    音频从属设备
  • TrimFilterFactory将其保留为
    AudioSlave
  • 最后,小写的FilterFactory将其更改为
    audioslave
另一方面,索引部分是:

  • 关键字TokenizerFactory生成
    Audioslave
  • 然后WordDelimiterFilterFactory和TrimFilterFactory将其保留为
    Audioslave
  • 最后,小写的FilterFactory将其更改为
    audioslave
因此这两个字段应该匹配,但查询不返回任何结果:


http://localhost:8983/solr/search_api/select?defType=edismax&fq=type:Artist&q=Audio%20slave&qf=artist_name_filter&wt=json

您的问题不在于分析,而在于QueryParser语法。空格用于分隔查询子句,这不受分析器的影响。当您有
q=Audio slave
时,它会应用查询语法首先规则,并将其分为“音频”和“从属”两个子句,然后分别分析每个子句

我相信,逃离空间应该可以完成任务:
q=Audio\slave


这里的短语查询似乎应该可以工作,例如
q=“Audio slave”
,但它不能工作。它为我生成了类似的内容:
“(Audio slave audioslave)slave”
,这是有问题的。

尝试使用
WhitespaceTokenizerFactory
作为索引部分的标记器。 这里的
KeywordTokenizerFactory
保持文本的原样……它不会创建任何标记

将其替换为
WhitespaceTokenizerFactory

WhitespaceTokenizerFactory
将在空间中创建标记。

他们的分析使用
WordDelimiterFilter
来创建单独的标记,而不是标记器。