这是我的搜索查询:
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或位置过滤器来保持相同的位置。