0

我有一个字段配置为

    <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时,它也会返回fun。我怎样才能避免这种行为并且只有乐趣匹配?是因为反向通配符吗?

4

1 回答 1

2

这是EdgeNGramFilterFactory过滤器的原因

<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" side="front"/>

EdgeNGramFilterFactory 为令牌生成边缘图,例如

funny会生成->f, fu, fun, funn, funny .....

因此,当您搜索 时fun,带有的文档funny将匹配

ReversedWildcardFilterFactory不会导致此问题,它只会增强前缀查询搜索。

例如funny将存储为ynnuf

前缀查询*nny将被转换为ynn*对性能更有利的查询。

于 2013-06-26T09:49:28.450 回答