0

サイトの検索エンジンに「オートコンプリート」を使用したいと考えています。

したがって、次の定義を持つ shortdesc というフィールドがあります。

<field name="shortdesc" type="text_de" indexed="true" stored="false" />

フィールド タイプ:

<fieldType name="text_de" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index"> 
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LengthFilterFactory" min="3" max="20"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" format="snowball" enablePositionIncrements="true"/>
        <filter class="solr.GermanNormalizationFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" format="snowball" enablePositionIncrements="true"/>
        <filter class="solr.GermanNormalizationFilterFactory"/>
   </analyzer>
</fieldType>

オートコンプリートを行うには、フィールド shortdesc をコピーする追加のフィールド (field_autocomplete) が必要です。このフィールドは次のように定義されています (このフィールドからデータを取得する必要はありません)。

<field name="field_autocomplete" type="text_autocomplete" indexed="true" stored="false" multiValued="true" />

そして型定義:

<fieldType name="text_autocomplete" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" enablePositionIncrements="true" />
        <filter class="solr.GermanNormalizationFilterFactory"/>
        <filter class="solr.EnglishPossessiveFilterFactory"/>
        <filter class="solr.EnglishMinimalStemFilterFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" enablePositionIncrements="true" />
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="25"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
     </analyzer>
     <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" enablePositionIncrements="true" />
        <filter class="solr.GermanNormalizationFilterFactory"/>
        <filter class="solr.EnglishPossessiveFilterFactory"/>
        <filter class="solr.EnglishMinimalStemFilterFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" enablePositionIncrements="true" />
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
</fieldType>

次に、フィールドをコピーします。

    <copyField source="shortdesc" dest="field_autocomplete"/>

では、最初の質問です。

  • インデックスを作成するとき、フィールド text_autocomplete のすべてのコンテンツは shortdesc のコピーから取得されます。これは、フィールド shortdesc の値が処理されてから field_autocomplete にコピーされることを意味しますか? その場合、タイプ text_autocomplete にフィルターを適用する必要はありません。なぜなら、それらは text_de と同じであり、ソースにはフィルターが既に適用されているからです。これは正しいですか、それともすべてのフィルターを指定する必要がありますか (「キャプチャ」するフィールドごとに) ?

そして別の質問:

  • アナライザーを使用するときに、ストップワードに属する単語をフィールド text_de に導入すると、フィルターが適用され、単語は表示されませんでした: ここに画像の説明を入力 しかし、フィールド text_autocomplete で同じことを行うと、単語がそこにあるようです用語として保存され、フィルターは何もしませんでした... ここに画像の説明を入力

クレイジーになっているこの2つのことについて、誰か私に手がかりを教えてもらえますか?

4

1 に答える 1