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 は、起動時にクラスのみを読み込みます。
手順
-
ProgrammaticSearchMappingProviderAPI を実装します。 次のファイルの完全修飾クラス (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);
}
}