solr
カスタムフィールドタイプを作成する方法
サーチ…
備考
カスタムJavaクラスベースのフィールドに関する注釈:
これは、カスタムフィールドコンパレータに基づいてSolrドキュメントをソートするために書き込まれた外部フィールドを使用して、Solrで大きな記事カスタムソートの小さなセクションです。
既存のSolrフィールドから作成されたカスタムフィールドに関する注釈:
Apacheは、このトピックについての詳細なドキュメントを作成しました。 - アナライザ、トークナイザ、およびフィルタについて
独自のカスタムJavaクラスからカスタムSolrフィールド型を作成する
スキーマの変更:
ソル・スキーマ・ファイルに新しいフィールド・タイプを定義し、そのタイプのフィールドを作成する必要があります。スキーマスニペットの例:
<!-- Source: solr/example/.../conf/schema.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<schema name="adam" version="1.3">
<types>
...
<fieldType name="rank_t" class="org.apache.solr.schema.ext.RankFieldType"/>
</types>
<fields>
...
<field name="rank" type="rank_t" indexed="true" stored="true"/>
</fields>
...
</schema>
カスタムフィールド型のJavaクラス:
// Source: src/java/org/apache/solr/schema/ext/RankFieldType.java
package org.apache.solr.schema.ext;
import java.io.IOException;
import org.apache.lucene.document.Fieldable;
import org.apache.lucene.search.SortField;
import org.apache.solr.response.TextResponseWriter;
import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.search.ext.RankFieldComparatorSource;
public class RankFieldType extends FieldType {
@Override
public SortField getSortField(SchemaField field, boolean top) {
return new SortField(field.getName(), new RankFieldComparatorSource(), top);
}
@Override
// copied verbatim from GeoHashField method
public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
writer.writeStr(name, f.stringValue(), false);
}
}
使用可能なフィールドタイプからカスタムフィールドタイプを作成する
この例に移る前に、理論的な知識を得ましょう。ここでは、 Analyzers 、 Tokenizers 、およびFiltersの 3つの重要な用語が使用されています。このようなカスタムフィールドを作成するには、1つのトークナイザと1つ以上のフィルタでアナライザを作成する必要があります。 ここで説明したように 、アナライザごとにトークナイザを1つだけ持つことができますが、この制限を克服する方法があります。
<fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory"/>
<filter class="solr.PatternReplaceFilterFactory" replace="all" replacement="" pattern="([^a-z])"/>
</analyzer>
</fieldType>
もう一つの例:
<fieldType name="lowercase_text" class="solr.TextField" positionIncrementGap="150">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
説明付きのもう1つの例:
<fieldType name="text_stem" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory"/>
</analyzer>
</fieldType>
この例はSolrの標準トークナイザで始まり、フィールドのテキストをトークンに分割します。これらのトークンは、Solrの標準フィルタを通過し、頭字語からドットを削除し、その他の一般的な操作を実行します。すべてのトークンは小文字に設定され、クエリ時に大文字と小文字を区別しない一致を容易にします。上記の例の最後のフィルタは、Porterステミングアルゴリズムを使用するステマーフィルタです。ステマーは基本的に、単語のさまざまな形をそれらが派生するベース、つまりステムにマップするマッピング規則のセットです。例えば、英語では、「抱擁」、「抱擁」および「抱擁」という言葉はすべて、幹語「抱擁」のすべての形態です。ステムマーは、これらの用語のすべてを「ハグ」に置き換えます。これは索引付けされるものです。つまり、「ハグ」のクエリは「ハグ」という用語と一致しますが、「巨大」は一致しません。
このようなカスタムフィールドの使用例:
<field name="keywords" type="text_stem" indexed="true" stored="true" />
使用可能なトークナイザタイプのリスト :トークナイザタイプのリスト