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を検索すると、 Funnyも返されます。どうすればこの動作を回避し、楽しみだけを一致させることができますか? 逆ワイルドカードが原因ですか?

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 に答える