0

スキーマ ファイルに LanguageAnalysis を追加しました。このステミング フィルター ファクトリを追加した後、機能し始めましたが、これにより、一部の単語が検索不能になりました。

の後にクエリタイムを追加しました。

私のスキーマファイルは次のようになります:

    <schema name="test" version="1.50">
 <types>
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
    <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" />
    <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0" omitNorms="true"/>
    <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/>
    <fieldType name="date" class="solr.TrieDateField" precisionStep="6" positionIncrementGap="0"/>
    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="100" side="front"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="100" side="back"/>     
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.PorterStemFilterFactory"/>
      </analyzer>
    </fieldType>
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>

 </types>
 <fields>
   <field name="Id" type="int" indexed="true" stored="true" required="true" /> 
   <field name="Name" type="text" indexed="true" stored="true"  required="false" />
   <field name="ShortDescription" type="text" indexed="true" stored="true" required="false" />
   <field name="FullDescription" type="text" indexed="true" stored="false" required="false" />       

   <field name="_version_" type="long" indexed="true" stored="true"/>

 </fields>


    <uniqueKey>Id</uniqueKey>
    <copyField source="Name" dest="NameCopy"/>      
    <defaultSearchField>Name</defaultSearchField>
    <solrQueryParser defaultOperator="OR"/>
</schema>

solr.PorterStemFilterFactory を追加すると、バッテリー、革新的、その他などの特定の単語が検索できなくなります。

なぜこれが起こっているのですか?ステミングと LanguageAnalysis のために別のフィルター ファクトリも試しましたが、これと同じように動作します。

私を助けてください。ここで何がうまくいかないのか混乱しています!!!

4

1 に答える 1

1

これは、Porter ステミングが単語をトークン化するときに単語を変更するためです。

インデックス作成時にも、同じステミング アルゴリズムをフィールドに適用する必要があります。<analyzer type="index">あなたの場合、セクションの下に次の行を追加します。

<filter class="solr.PorterStemFilterFactory"/>

このページを見て、PorterStemmer が単語に対してどのように機能するかを確認してください: http://9ol.es/porter_js_demo.html

于 2013-08-13T09:13:19.520 に答える