サイトの検索エンジンに「オートコンプリート」を使用したいと考えています。
したがって、次の定義を持つ 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つのことについて、誰か私に手がかりを教えてもらえますか?