0

問題があり、どうすればよいかわかりません...

これは非常に簡単です。SORL で作成された 2 つのインデックスがあります。

"Scholastic Reader, Level 2 >" "Scholastic Reader, Level 3 >"

(記号 > は文字列の末尾に移動します)

検索 1: 「Scholastic Reader, Level」で検索すると、サービスは両方のインデックスを返します。これは良いことです。

XML 応答:

<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">2</int>
        <lst name="params">
            <str name="indent">on</str>
            <str name="start">0</str>
            <str name="q">type:masterseries AND title:("Scholastic Reader, Level")</str>
            <str name="version">2.2</str>
            <str name="rows">10</str>
        </lst>
    </lst>
    <result name="response" numFound="2" start="0">
        <doc>
            <str name="id">118</str>
            <arr name="title">
                <str>Scholastic Reader, Level 2 ></str>
            </arr>
            <str name="type">masterseries</str>
            <str name="uuid">3bf5b10c-a286-4ad0-9c63-bb402f57a7ed</str>
        </doc>
        <doc>
            <str name="id">118</str>
            <arr name="title">
                <str>Scholastic Reader, Level 3 ></str>
            </arr>
            <str name="type">masterseries</str>
            <str name="uuid">cdb19c28-0988-4375-acf0-916bc6664055</str>
        </doc>
    </result>
</response>

検索 2: "Scholastic Reader, Level 3" で検索すると、"Scholastic Reader, Level 3 >" GREAT! が返されます。

クエリ文字列: type:masterseries AND title:("Scholastic Reader, Level 3") XML 応答:

    <response>
    <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">2</int>
    <lst name="params">
        <str name="indent">on</str>
        <str name="start">0</str>
        <str name="q">type:masterseries AND title:("Scholastic Reader, Level 3")</str>
        <str name="version">2.2</str>
        <str name="rows">10</str>
    </lst>
    </lst>
    <result name="response" numFound="1" start="0">
        <doc>
            <str name="id">118</str>
            <arr name="title">
                <str>Scholastic Reader, Level 3 ></str>
            </arr>
            <str name="type">masterseries</str>
            <str name="uuid">cdb19c28-0988-4375-acf0-916bc6664055</str>
        </doc>
    </result>
</response>

しかし、ここで奇妙なことが起こります

検索 3: 「Scholastic Reader, Level 2」、または正確な文字列「Scholastic Reader, Level 2 >」で検索すると、「NOTHING」が返されます。

クエリ文字列: type:masterseries AND title:("Scholastic Reader, Level 2") XML 応答:

<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">2</int>
        <lst name="params">
            <str name="indent">on</str>
            <str name="start">0</str>
            <str name="q">type:masterseries AND title:("Scholastic Reader, Level 2")</str>
            <str name="version">2.2</str>
            <str name="rows">10</str>
        </lst>
    </lst>
<result name="response" numFound="0" start="0"/>
</response>

1、4、5、6 のような数字のインデックスを作成しても機能しますが、レベル「2」の文字列は機能しません。

ご協力いただきありがとうございます。

アップデート:

schema.xml ファイルに構成を追加します。

 <fieldType name="text_en" class="solr.TextField"
        positionIncrementGap="100">
        <analyzer type="index">
            <charFilter class="solr.HTMLStripCharFilterFactory" />
            <tokenizer class="solr.StandardTokenizerFactory" />
            <filter class="solr.ISOLatin1AccentFilterFactory" />
            <filter class="solr.StopFilterFactory"
                ignoreCase="true" words="lang/stopwords_en.txt"
                enablePositionIncrements="false" />
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.EnglishPossessiveFilterFactory" />
            <filter class="solr.KeywordMarkerFilterFactory"
                protected="protwords.txt" />
            <filter class="solr.PorterStemFilterFactory" />
        </analyzer>
        <analyzer type="query">
            <charFilter class="solr.HTMLStripCharFilterFactory" />            
            <tokenizer class="solr.StandardTokenizerFactory" />
            <filter class="solr.SynonymFilterFactory"
                synonyms="synonyms.txt" ignoreCase="true" expand="true" />
            <filter class="solr.StopFilterFactory"
                ignoreCase="true" words="lang/stopwords_en.txt"
                enablePositionIncrements="false" />
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.ISOLatin1AccentFilterFactory" />
            <filter class="solr.EnglishPossessiveFilterFactory" />
            <filter class="solr.KeywordMarkerFilterFactory"
                protected="protwords.txt" />            
            <filter class="solr.PorterStemFilterFactory" />
        </analyzer>
    </fieldType>
4

1 に答える 1

2

あなたの問題は次のとおりです。

<filter class="solr.SynonymFilterFactory"
            synonyms="synonyms.txt" ignoreCase="true" expand="true" />

「synonyms.txt」を見てください。「2」を「too」に置き換えたエントリが見つかると思います (「to」の場合、StopFilter によって削除され、違い)。以来expand=true、これは次のようなクエリになります。

"Scholastic Reader Level 2 too"

これは、引用符で囲まれていない一連のTermQuerys では問題ありませんが、PhraseQuery. "index"これを修正するには、SynonymFilter をアナライザーに組み込むことができます。

私が見ることができる他の可能性は、フィルタが適用される順序が異なる出力になる可能性があるため、とのISOLatin1AccentFilterFactory後に何か奇妙なことが起こっていることですが、それが問題であることは非常に疑わしいです。StopFilterLowerCaseFilter

于 2013-01-30T19:29:59.623 に答える