カスタム・フィールド型用のインターフェイス
CustomFieldTypeインターフェイスはSolrカスタム・フィールド型にマークを付け、実際にソートされるフィールド型を提供します。
DataStax Enterpriseは、Solrカスタム・フィールド型にマークを付け、それらが実際に格納されるフィールドの型を提供するCustomFieldTypeインターフェイスを実装しています。カスタム・フィールド型は整数トライ・フィールドを、コンマで区切られた整数値のリストを表す文字列として格納します。インデックスの作成時に、文字列はその整数値に分かれ、それぞれがトライ整数フィールドとしてインデックスが作成されます。このクラスは、文字列表現に基づいて複数値のフィールドを効率よく実装します。
CustomFieldTypeインターフェイスを使用するには:
- 以下のリファレンス実装のようなカスタム・フィールド型クラスを実装します。
- クラスをJARにエクスポートし、そのJARをこの場所に配置します。
- パッケージ・インストール: usr/share/dse
- Installer-No Servicesおよびtarボールのインストール: install_location/resources/dse/lib
JARは自動的にCLASSPATHに追加されます。
リファレンス実装
カスタム・フィールド型クラスの例を以下に示します。
package com.datastax.bdp.search.solr.functional;
import com.datastax.bdp.search.solr.CustomFieldType;
import java.util.ArrayList;
import java.util.List;
import org.apache.lucene.index.IndexableField;
import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.schema.StrField;
import org.apache.solr.schema.TrieField;
public class CustomTestField extends TrieField implements CustomFieldType
{
public CustomTestField()
{
this.type = TrieField.TrieTypes.INTEGER;
}
@Override
public FieldType getStoredFieldType()
{
return new StrField();
}
@Override
public boolean multiValuedFieldCache()
{
return true;
}
@Override
public ListIndexableField createFields(SchemaField sf, Object value, float boost)
{
String[] values = ((String) value).split(" ");
ListIndexableField fields = new ArrayListIndexableField();
for (String v :values)
{
fields.add(createField(sf, v, boost));
}
return fields;
}
@Override
public String toInternal(String value)
{
return value;
}
@Override
public String toExternal(IndexableField f)
{
return f.stringValue();
}
}