3

私はこの投稿で2つのことを理解しようとしています:

  1. フィールド型定義にステマーが定義されているにもかかわらず、「built」が「build」にステミングされないのはなぜですか。ただし、「構築」は「構築」にステミングされています

  2. Luke を使用してインデックスを調べ、どの単語が何に語幹変換されたかを確認する方法。Luke では、「build」が「build」に語幹を変えられているのを見ることができませんでした。「ビルド」を検索することで「ビルド」を含む行を正常に取得できるため、Lucene がそれを抑止していることはわかっています。

このリンクは非常に役に立ちましたが、私の質問には答えませんでした。

参考までに、ここに schema.xml の部分を示します。

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    -->
    <!-- Case insensitive stop word removal.
      add enablePositionIncrements=true in both the index and query
      analyzers to leave a 'gap' for more accurate phrase queries.
    -->
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="stopwords_en.txt"
            enablePositionIncrements="true"
            />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPossessiveFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
    <filter class="solr.EnglishMinimalStemFilterFactory"/>
    -->
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="stopwords_en.txt"
            enablePositionIncrements="true"
            />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPossessiveFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
    <filter class="solr.EnglishMinimalStemFilterFactory"/>
    -->
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>

フィールド定義は

<field name="features" type="text_en" indexed="true" stored="true" multiValued="true"/>

データ セットは複数のドキュメントで構成されています。1 つのドキュメントは features フィールドに「Building」があり、1 つのドキュメントは同じフィールドに「built」があり、1 つのドキュメントは features フィールドに「Built-in」があります。

ファイル: hd.xml:

<field name="features">building NoiseGuard, SilentSeek technology, Fluid Dynamic Bearing (FDB) motor</field>

ファイル ipod_video.xml:

<field name="features">Notes, Calendar, Phone book, Hold button, Date display, Photo wallet, Built-in games, JPEG photo playback, Upgradeable firmware, USB 2.0 compatibility, Playback speed control, Rechargeable capability, Battery level indication</field>

ファイル sd500.xml:

 <field name="features">built in flash, red-eye reduction</field>

Lukeall-3.3.0 を使用して、これは「features:build」で検索した結果です。(予想される 3 つのドキュメントではなく) 1 つが返されることに注意してください ここに画像の説明を入力 。その 1 つのドキュメント内でさえ、ステミングは表示されません。 ここに画像の説明を入力

また、Luke で「features:built」を検索すると、次の 2 つのドキュメントが返されます。 ここに画像の説明を入力

それらのいずれかを選択すると、元の「ビルド」が表示されますが、「ビルド」は表示されません。 ここに画像の説明を入力

4

1 に答える 1

2

このような例外的なケースでは、StemmerOverrideFilterを使用してステミング アルゴリズムを調整できます。

于 2011-08-18T02:55:34.483 に答える