3.4. リモートキャッシュでアナライザーを使用する
アナライザーは、入力データを、索引付けおよび照会できる用語に変換します。アナライザーの定義は Java クラスの @Text
アノテーションを使用するか、Protobuf スキーマに直接指定します。
手順
-
プロパティーに
@Text
アノテーションを付け、その値が分析されることを示します。 -
analyzer
属性を使用して、インデックス作成および検索に使用する任意のアナライザーを指定します。
Protobuf スキーマ
/* @Indexed */ message TestEntity { /* @Keyword(projectable = true) */ optional string id = 1; /* @Text(projectable = true, analyzer = "simple") */ optional string name = 2; }
Java クラス
@Text(projectable = true, analyzer = "whitespace") @ProtoField(value = 1) private String id; @Text(projectable = true, analyzer = "simple") @ProtoField(value = 2) private String description;
3.4.1. デフォルトのアナライザー定義
Data Grid は、デフォルトのアナライザー定義のセットを提供します。
定義 | 説明 |
---|---|
| テキストフィールドをトークンに分割し、空白と句読点を区切り文字として扱います。 |
| 非文字で区切り、すべての文字を小文字に変換することにより、入力ストリームをトークン化します。空白と非文字は破棄されます。 |
| テキストストリームを空白で分割し、空白以外の文字のシーケンスをトークンとして返します。 |
| テキストフィールド全体を単一トークンとして扱います。 |
| Snowball Porter フィルターを使用して英語の単語を語幹にします。 |
| デフォルトでサイズ 3 つのグラムである n-gram トークンを生成します。 |
|
テキストフィールドを |
| テキストのすべての文字を小文字に変換します。テキストはトークン化されません (ノーマライザー)。 |
これらのアナライザー定義は Apache Lucene に基づいています。tokenizers、filters、および CharFilters に関する詳細は、Apache Lucene のドキュメントを参照してください。
関連情報
3.4.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); } }