3.3. リモートキャッシュでアナライザーを使用する
アナライザーは、入力データを、索引付けおよび照会できる用語に変換します。アナライザーの定義は Java クラスの @Field
アノテーションを使用するか、Protobuf スキーマに直接指定します。
手順
-
Analyze.YES
属性を追加して、プロパティーが分析されていることを示します。 -
@Analyzer
アノテーションで アナライザー定義を指定します。
Protobuf スキーマ
/* @Indexed */ message TestEntity { /* @Field(store = Store.YES, analyze = Analyze.YES, analyzer = @Analyzer(definition = "keyword")) */ optional string id = 1; /* @Field(store = Store.YES, analyze = Analyze.YES, analyzer = @Analyzer(definition = "simple")) */ optional string name = 2; }
Java クラス
@ProtoDoc("@Field(store = Store.YES, analyze = Analyze.YES, analyzer = @Analyzer(definition = \"keyword\"))") @ProtoField(1) final String id; @ProtoDoc("@Field(store = Store.YES, analyze = Analyze.YES, analyzer = @Analyzer(definition = \"simple\"))") @ProtoField(2) final String description;
3.3.1. デフォルトのアナライザー定義
Data Grid は、デフォルトのアナライザー定義のセットを提供します。
定義 | 説明 |
---|---|
| テキストフィールドをトークンに分割し、空白と句読点を区切り文字として扱います。 |
| 非文字で区切り、すべての文字を小文字に変換することにより、入力ストリームをトークン化します。空白と非文字は破棄されます。 |
| テキストストリームを空白で分割し、空白以外の文字のシーケンスをトークンとして返します。 |
| テキストフィールド全体を単一トークンとして扱います。 |
| SnowballPorter フィルターを使用して英語の単語を語幹にします。 |
| デフォルトでサイズ 3 つのグラムである n-gram トークンを生成します。 |
|
テキストフィールドを |
これらのアナライザー定義は Apache Lucene をベースとし、as-is で提供されます。tokenizers、filters、および CharFilters に関する詳細は、適切な Lucene のドキュメントを参照してください。
3.3.2. カスタムアナライザー定義の作成
カスタムアナライザー定義を作成し、それらを Data Grid Server インストールに追加します。
前提条件
Data Grid Server が実行している場合は停止します。
Data Grid Server は、起動時にクラスのみを読み込みます。
手順
-
ProgrammaticSearchMappingProvider
API を実装します。 次のファイルの完全修飾クラス (FQN) を使用して、実装を JAR にパッケージ化します。
META-INF/services/org.infinispan.query.spi.ProgrammaticSearchMappingProvider
-
JAR ファイルを Data Grid Server インストールの
server/lib
ディレクトリーにコピーします。 - Data Grid Server を起動します。
ProgrammaticSearchMappingProvider
の例
import org.apache.lucene.analysis.core.LowerCaseFilterFactory; import org.apache.lucene.analysis.core.StopFilterFactory; import org.apache.lucene.analysis.standard.StandardFilterFactory; import org.apache.lucene.analysis.standard.StandardTokenizerFactory; import org.hibernate.search.cfg.SearchMapping; import org.infinispan.Cache; import org.infinispan.query.spi.ProgrammaticSearchMappingProvider; public final class MyAnalyzerProvider implements ProgrammaticSearchMappingProvider { @Override public void defineMappings(Cache cache, SearchMapping searchMapping) { searchMapping .analyzerDef("standard-with-stop", StandardTokenizerFactory.class) .filter(StandardFilterFactory.class) .filter(LowerCaseFilterFactory.class) .filter(StopFilterFactory.class); } }