2

ステミングやその他の改善を利用するために、一部のフィールドを から に変更しtext_generalましたが、残念ながら、この変更により強調表示が壊れてしまいました。text_en語幹のない単語 (つまり、"child" のように、語幹のあるバージョンが単語自体と同じ単語) のみを強調表示したいようです。

デフォルトの fieldType 定義を使用しています。

 <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
   <analyzer type="index">
     <tokenizer class="solr.StandardTokenizerFactory"/>
     <filter class="solr.StopFilterFactory"
             ignoreCase="true"
             words="lang/stopwords_en.txt"
             />
     <filter class="solr.LowerCaseFilterFactory"/>
     <filter class="solr.EnglishPossessiveFilterFactory"/>
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
     <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="lang/stopwords_en.txt"
             />
     <filter class="solr.LowerCaseFilterFactory"/>
     <filter class="solr.EnglishPossessiveFilterFactory"/>
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
     <filter class="solr.PorterStemFilterFactory"/>
   </analyzer>
 </fieldType>

そしてhl.fl=title&hl=true、私のクエリで強調表示を有効にします。それが重要な場合、これはファセット検索でもあります。

この場合、前述したように、"child" のような語幹のない単語のみが強調表示されます。定義でインデックス アナライザーからステミング フィルターを削除すると (クエリ アナライザーは効果がないように見えます)、text_enストップワードを除くすべての一致した単語が強調表示されます。さらに、text_enを使用するように変更するとEnglishMinimalStemFilterFactory、より多くの単語が強調表示されます。これは、Porter のステマーではなく Porter のステマーによってステミングされているためだと思われます。そのような言葉の例は「strides」です。

誰が何が起こっているのか知っていますか?

4

1 に答える 1

2

私はこの質問が死んでいることを知っていますが、これをここで読んでいる人にとっては私の解決策です.

まず、この動作は「hlq」を使用している場合にのみ発生することに注意してください。強調表示クエリと検索クエリとして「q」を使用している場合、問題はありません。しかし、それがアプリケーションに必要でない場合は、次のようにすることができます。

アナライザー チェーンで、インデックス作成とクエリの両方に対して、これを追加します。

<!-- will keep both the stemmed and unstemmed versions from any stemmer -->

<filter class="solr.KeywordRepeatFilterFactory" />

<!-- put your stemmer here, something like: -->

<filter class="solr.SnowballPorterFilterFactory"/>

<!-- if unstemmed == stemmed, only keep one -->

<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>

基本的に、これにより、語幹のあるバージョンと語幹のないバージョンのすべての単語が保持され、重複が削除されます。これで、ハイライトはドキュメントに一致します (それでも hlq として入力された EXACT フレーズのみに一致しますが、q は同じ語幹を持つものすべてに一致するため、q によって返されるドキュメントの中には空白のハイライト フィールドがあるものがまだ存在する可能性があります)。

于 2017-05-02T19:10:57.663 に答える