当查询包含由空格分隔的单词的引号时,部分搜索的Solr不起作用



这是我的搜索查询:

name_text_partial_all:"你好世界"

该字段在一个文档的索引中有以下单词:helloworld

以下是我对这种类型的模式定义:

<fieldtype class="solr.TextField" name="text_partial_all" positionIncrementGap="100" omitNorms="false" stored="false">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="[^dsa-zA-Z]" replacement=""/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="30"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="[^dsa-zA-Z]" replacement=""/>
    <filter class="solr.LengthFilterFactory" min="2" max="30" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.StandardFilterFactory"/>
  </analyzer>
</fieldtype>

这找不到文档。知道为什么吗?

<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="30"/>将生成位于不同位置的ngram令牌
例如Hello World,当它通过NGramFilterFactory时,标记Hello和World将位于不同的位置
您可以查看Hello World的分析,标记Hello位于位置10,World位于位置20。
因此,查找确切短语name_text_partial_all:"hello world"的查询将不起作用,而name_text_partial_all:"hello world"~9将起作用
您需要使用slop或位置过滤器来保持相同的位置。

最新更新