我的字段配置为
<fieldType name="gtext" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<!--Needed for efficient trailling wildcard queries-->
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" side="front"/>
<filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"
maxPosAsterisk="2" maxPosQuestion="1" minTrailing="2" maxFractionAsterisk="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="0"
catenateNumbers="1"
stemEnglishPossessive="1"
catenateAll="0"
preserveOriginal="1"
/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="0"
catenateNumbers="1"
stemEnglishPossessive="1"
catenateAll="0"
preserveOriginal="1"
/>
</analyzer>
</fieldType>
因此,当我搜索示例 fun 时,它也会返回搞笑。我怎样才能避免这种行为,只有乐趣匹配?是因为反向通配符吗?
答案 0 :(得分:2)
这是EdgeNGramFilterFactory过滤器的原因
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" side="front"/>
EdgeNGramFilterFactory为令牌生成边缘克数,例如
funny
会生成 - &gt; f, fu, fun, funn, funny .....
因此,当您搜索fun
时,funny
的文档会匹配
ReversedWildcardFilterFactory不会导致此问题,它只会增强前缀查询搜索。
例如funny
将存储为ynnuf
前缀查询*nny
将转换为ynn*
,这对性能更有利。