Red Hat Training

A Red Hat training course is available for Red Hat Fuse

第43章 ElasticSearch

Elasticsearch コンポーネント

Camel 2.11 から利用可能
ElasticSearch コンポーネントを使用すると、ElasticSearch サーバーとのインターフェイスが可能になります。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-elasticsearch</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

Camel on EAP デプロイメント

このコンポーネントは、Red Hat JBoss Enterprise Application Platform (JBoss EAP) コンテナー上で簡素化されたデプロイメントモデルを提供する Camel on EAP (Wildfly Camel) フレームワークによってサポートされます。このモデルの詳細は、Deploying into a Web Server の Apache Camel on JBoss EAP の章を参照してください

URI 形式

elasticsearch://clusterName?[options]
ヒント
ローカル(JVM/classloader) ElasticSearch サーバーに対して実行する場合は、URI の clusterName の値を local に設定します。詳細は、クライアントガイド を参照してください。

エンドポイントオプション

以下のオプションは ElasticSearch エンドポイントで設定できます。すべては、エンドポイント URI パラメーターまたはヘッダー(ヘッダーオーバーライドエンドポイントプロパティー)として設定する必要があります。
name description
operation 必須。実行する操作を示します。
indexName
動作させるインデックスの名前。
indexType
動作させるインデックスのタイプ。
ip
Camel 2.12 を使用する TransportClient リモートホスト IP アドレス。
port
使用する TransportClient リモートポート(デフォルトは 9300) Camel 2.12
transportAddresses
Camel 2.16: 使用するリモートトランスポートアドレス ip:port 形式のコンマ区切りリスト。transportAddresses を代わりに考慮するには、オプション ip および port を空白のままにする必要があります。
consistencyLevel
Camel 2.16: INDEX および BULK 操作で使用する書き込み一貫性レベル( ONEQUORUMALL または DEFAULTのいずれかです)。
replicationType
Camel 2.16: INDEX および BULK 操作で使用するレプリケーションタイプ( SYNCASYNC または DEFAULTのいずれかです)。Elasticsearch 2.0.0 から非同期レプリケーションが削除されているため、Camel 2.17: replicationType オプションは削除されました。
parent
Camel 2.16.1 / 2.17.0: 親レコードの ID を指定するために Elasticsearch Parent-Child 関係の INDEX 操作で使用されるオプションです。
clientTransportSniff
Camel 2.17: クライアントが残りのクラスターをスニッフィングできるかどうかを指定します。

メッセージ操作

以下の ElasticSearch 操作は現在サポートされています。operation のキーでエンドポイント URI オプションまたはエクスチェンジヘッダーを設定し、値は以下のいずれかに設定されるだけです。一部の操作では、他のパラメーターやメッセージボディーも設定する必要があります。
operation メッセージボディー description
INDEX MapString、または byte[] コンテンツでインデックス化するコンテンツ XContentBuilder インデックスにコンテンツを追加し、本文でコンテンツの indexId を返します。
GET_BY_ID 取得するコンテンツのインデックス ID 指定されたインデックスを取得し、ボディーで GetResult オブジェクトを返します。
DELETE 削除するコンテンツのインデックス ID 指定された indexId を削除し、ボディーで DeleteResult オブジェクトを返します。
BULK_INDEX
すでに受け入れられたタイプの リスト または コレクション (XContentBuilderMapbyte[]、または String)
Camel 2.14 は、 コンテンツをインデックスに追加し、ボディーで正常にインデックス化されたドキュメントの ID の List を返します。
BULK
すでに受け入れられたタイプの リスト または コレクション (XContentBuilderMapbyte[]、または String)
Camel 2.15 では、 コンテンツをインデックスに追加し、ボディーで BulkResponse オブジェクトを返します。
SEARCH Map または、 SearchRequest
Camel 2.15: クエリー文字列のマップでコンテンツを検索します。
MULTIGET 一覧 MultigetRequest.Item
Camel 2.17: MultigetRequest で指定したインデックスやタイプなどを取得し、ボディーで MultigetResponse オブジェクトを返します。
MULTISEARCH 一覧 SearchRequest
Camel 2.17: MultiSearchRequest に指定されたパラメーターを検索し、ボディーで MultiSearchResponse オブジェクトを返します。
EXISTS
ヘッダーとしてのインデックス名
Camel 2.17: ボディー内のブール値オブジェクトを返します。
UPDATE Map更新するコンテンツ、String、または byte[] XContentBuilder
Camel 2.17: コンテンツをインデックスに更新し、ボディーでコンテンツの indexId を返します。

インデックスの例

以下は簡単な INDEX の例になります。
from("direct:index")
    .to("elasticsearch://local?operation=INDEX&indexName=twitter&indexType=tweet");
<route>
    <from uri="direct:index" />
    <to uri="elasticsearch://local?operation=INDEX&indexName=twitter&indexType=tweet"/>
</route>
クライアントは単に、Map が含まれるボディーメッセージをルートに渡す必要があります。結果ボディーには、作成された indexId が含まれます。
Map<String, String> map = new HashMap<String, String>();
map.put("content", "test");
String indexId = template.requestBody("direct:index", map, String.class);

Java の例

以下の例は、Java で定義された Camel ルートから ElasticSearch コンポーネントを使用する方法を示しています。
CamelContext camelContext = new DefaultCamelContext();
camelContext.addRoutes(new RouteBuilder() {
    @Override
    public void configure() throws Exception {
        from("direct:index")
          .to("elasticsearch://local?operation=INDEX&indexName=twitter&indexType=tweet");
    }
});

Map<String, String> indexedData = new HashMap<>();
indexedData.put("content", "test");

ProducerTemplate template = camelContext.createProducerTemplate();
template.sendBody("direct:index", indexedData);

詳細は、これらのリソース を参照してください。