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 操作で使用する書き込み一貫性レベル(
ONE 、QUORUM 、ALL または DEFAULT のいずれかです)。
|
replicationType
|
Camel 2.16: INDEX および BULK 操作で使用するレプリケーションタイプ(
SYNC 、ASYNC または 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
|
Map 、String 、または byte[] コンテンツでインデックス化するコンテンツ XContentBuilder
|
インデックスにコンテンツを追加し、本文でコンテンツの indexId を返します。
|
GET_BY_ID
|
取得するコンテンツのインデックス ID |
指定されたインデックスを取得し、ボディーで GetResult オブジェクトを返します。
|
DELETE
|
削除するコンテンツのインデックス ID |
指定された indexId を削除し、ボディーで DeleteResult オブジェクトを返します。
|
BULK_INDEX
|
すでに受け入れられたタイプの リスト または コレクション (
XContentBuilder 、Map 、byte[] 、または String )
|
Camel 2.14 は、 コンテンツをインデックスに追加し、ボディーで正常にインデックス化されたドキュメントの ID の List を返します。
|
BULK
|
すでに受け入れられたタイプの リスト または コレクション (
XContentBuilder 、Map 、byte[] 、または 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);