0

インデックスアナライザーとクエリアナライザーにはSnowballPorterFilterFactoryを使用しています。「職業」という言葉を検索すると。Solrは、「profession」を含む記事のみを正常に検索しますが、「professional」「professionalism」が必要です...

これはschema.xmlの現在の構成です

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="1"/>
        <filter class="solr.ASCIIFoldingFilterFactory" />
        <filter class="solr.SnowballPorterFilterFactory" language="French"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>

    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
        <filter class="solr.ASCIIFoldingFilterFactory" />
        <filter class="solr.SnowballPorterFilterFactory" language="French"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    </analyzer>
</fieldType>
4

1 に答える 1

0

何が起こっているのかというと、ポーターがクエリを過度にステミングしています。検索するとprofession、キーワードは に切り詰められますがprofessprofession professionalprofessionalism はすべて としてインデックスに格納されprofessionます。

fieldTypeこれを回避する唯一の実際の方法は、クエリをステム処理しない別の場所を追加することです。

何かのようなもの:

<fieldType name="text_unstemmed_query" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="1"/>
        <filter class="solr.ASCIIFoldingFilterFactory" />
        <filter class="solr.SnowballPorterFilterFactory" language="French"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
        <filter class="solr.ASCIIFoldingFilterFactory" />
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    </analyzer>
</fieldType>

次のようなコピーフィールドを使用します。

<copyField source="your_text_field" dest="text_unstem_query_field"/>

于 2012-05-15T22:28:04.933 に答える