第155章 Solr
Solr コンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.9 以降で利用可能
Solr コンポーネントを使用すると、Apache Lucene Solr サーバー(SolrJ 3.5.0)とのインターフェイスが可能になります。
Maven ユーザーは、このコンポーネントの
pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-solr</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
URI 形式は以下のとおりです。
solr://host[:port]/solr?[options]
solrs://host[:port]/solr ?[options]
solrCloud://host[:port]/solr?[options]
エンドポイントオプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下の SolrServer オプションは、Solr エンドポイントで設定できます。
| name | デフォルト値 | description |
|---|---|---|
maxRetries
|
0
|
一時的なエラーが発生した場合に試行する最大再試行回数 |
soTimeout
|
1000
|
基礎となる HttpConnectionManager で読み取りタイムアウト。これはクエリーに適していますが、インデックス作成には適していません。 |
connectionTimeout
|
100
|
基礎となる HttpConnectionManager の connectionTimeout |
defaultMaxConnectionsPerHost
|
2
|
基礎となる HttpConnectionManager の maxConnectionsPerHost |
maxTotalConnections
|
20
|
基礎となる HttpConnectionManager の maxTotalConnection |
followRedirects
|
false
|
Solr サーバーへリダイレクトが使用されるかどうかを示します。 |
allowCompression
|
false
|
これを有効にするには、サーバー側が gzip または deflate をサポートする必要があります。 |
requestHandler
|
/update (xml) | 使用するリクエストハンドラーの設定 |
streamingThreadCount
|
2
|
Camel 2.9.2 で StreamingUpdateSolrServerのスレッド数を設定する |
streamingQueueSize
|
10
|
Camel 2.9.2 で StreamingUpdateSolrServerのキューサイズを設定する |
zkhost
|
null
|
Camel 2.14.0 は、zkhost=localhost:8123など、solrCloud が使用可能な zoo keeper ホスト情報を設定します。
|
collection
|
null
|
Camel 2.14.0 は、solrCloud サーバーが使用できるコレクション名を設定します
|
メッセージ操作 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下の Solr 操作は現在サポートされています。キー
SolrOperation でエクスチェンジヘッダーを設定し、値は以下のいずれかに設定します。一部の操作では、メッセージボディーも設定する必要があります。
INSERT操作は CommonsHttpSolrServerを使用します。
| operation | メッセージボディー | description |
|---|---|---|
INSERT/INSERT_STREAMING
|
該当なし | メッセージヘッダーを使用してインデックスを追加します(SolrField の接頭辞が必要です)。 |
INSERT/INSERT_STREAMING
|
File | 指定されたファイルを使用してインデックスを追加します(ContentStreamUpdateRequest を使用)。 |
INSERT/INSERT_STREAMING
|
SolrInputDocument | Camel 2.9.2 は、指定の SolrInputDocument に基づいてインデックスを更新します。 |
INSERT/INSERT_STREAMING
|
String XML | Camel 2.9.2 は、指定の XML に基づいてインデックスを更新します(SolrInputDocument 形式に従う必要があります) |
ADD_BEAN
|
Bean インスタンス | アノテーションが付けられた Beanの値に基づいてインデックスを追加します。 |
ADD_BEANS
|
collection<bean> | Camel 2.15 は、アノテーションが付けられた Bean のコレクションに基づいてインデックスを追加します。 |
DELETE_BY_ID
|
削除するインデックス ID | ID 別にレコードを削除する |
DELETE_BY_QUERY
|
クエリー文字列 | クエリーによるレコードの削除 |
COMMIT
|
該当なし | 保留中のインデックス変更でコミットを実行します。 |
ROLLBACK
|
該当なし | 保留中のインデックス変更でロールバックを実行します。 |
OPTIMIZE
|
該当なし | 保留中のインデックス変更でコミットを実行し、最適化コマンドを実行します。 |
例 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下は、簡単な
INSERT、DELETE および COMMIT の例です。
from("direct:insert")
.setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_INSERT))
.setHeader(SolrConstants.FIELD + "id", body())
.to("solr://localhost:8983/solr");
from("direct:delete")
.setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_DELETE_BY_ID))
.to("solr://localhost:8983/solr");
from("direct:commit")
.setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_COMMIT))
.to("solr://localhost:8983/solr");
<route>
<from uri="direct:insert"/>
<setHeader headerName="SolrOperation">
<constant>INSERT</constant>
</setHeader>
<setHeader headerName="SolrField.id">
<simple>${body}</simple>
</setHeader>
<to uri="solr://localhost:8983/solr"/>
</route>
<route>
<from uri="direct:delete"/>
<setHeader headerName="SolrOperation">
<constant>DELETE_BY_ID</constant>
</setHeader>
<to uri="solr://localhost:8983/solr"/>
</route>
<route>
<from uri="direct:commit"/>
<setHeader headerName="SolrOperation">
<constant>COMMIT</constant>
</setHeader>
<to uri="solr://localhost:8983/solr"/>
</route>
クライアントは単にメッセージボディーを挿入ルートまたは削除ルートに渡してから、コミットルートを呼び出す必要があります。
template.sendBody("direct:insert", "1234");
template.sendBody("direct:commit", null);
template.sendBody("direct:delete", "1234");
template.sendBody("direct:commit", null);
Solr のクエリー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
現在、このコンポーネントはデータのクエリーをネイティブにサポートしません(後で追加される可能性があります)。ここでは、以下のように HTTP を使用して Solr をクエリーできます。
//define the route to perform a basic query
from("direct:query")
.recipientList(simple("http://localhost:8983/solr/select/?q=${body}"))
.convertBodyTo(String.class);
...
//query for an id of '1234' (url encoded)
String responseXml = (String) template.requestBody("direct:query", "id%3A1234");
詳細は、これらのリソースを参照してください。