这是我的搜索查询:
name_text_partial_all:“你好世界”
该字段在一个文档的索引中包含以下单词:hello world
以下是此类型的架构定义:
<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="[^\d\sa-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="[^\d\sa-zA-Z]" replacement=""/>
<filter class="solr.LengthFilterFactory" min="2" max="30" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StandardFilterFactory"/>
</analyzer>
</fieldtype>
这是找不到文件。有什么线索的原因?
答案 0 :(得分:1)
<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="30"/>
将生成ngram令牌,这些令牌位于不同的位置
对于例如Hello World当它通过NGramFilterFactory时,令牌Hello和World将处于不同的位置
您可以检查Hello World的分析,令牌Hello位于第10位,世界位于第20位
因此,当name_text_partial_all:"hello world"
起作用时,查找完整短语name_text_partial_all:"hello world"~9
的查询将无效
您需要使用slop或位置过滤器来保持相同的位置。