第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>
Copy to Clipboard Toggle word wrap

URI 形式

URI 形式は以下のとおりです。
solr://host[:port]/solr?[options]
solrs://host[:port]/solr ?[options]
solrCloud://host[:port]/solr?[options]
Copy to Clipboard Toggle word wrap

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

以下の SolrServer オプションは、Solr エンドポイントで設定できます。
Expand
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.2StreamingUpdateSolrServerのスレッド数を設定する
streamingQueueSize 10 Camel 2.9.2StreamingUpdateSolrServerのキューサイズを設定する
zkhost
null
Camel 2.14.0 は、zkhost=localhost:8123など、solrCloud が使用可能な zoo keeper ホスト情報を設定します。
collection
null
Camel 2.14.0 は、solrCloud サーバーが使用できるコレクション名を設定します

メッセージ操作

以下の Solr 操作は現在サポートされています。キー SolrOperation でエクスチェンジヘッダーを設定し、値は以下のいずれかに設定します。一部の操作では、メッセージボディーも設定する必要があります。
Expand
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 該当なし 保留中のインデックス変更でコミットを実行し、最適化コマンドを実行します。

以下は、簡単な INSERTDELETE および 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");
Copy to Clipboard Toggle word wrap
<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>
Copy to Clipboard Toggle word wrap
クライアントは単にメッセージボディーを挿入ルートまたは削除ルートに渡してから、コミットルートを呼び出す必要があります。
    template.sendBody("direct:insert", "1234");
    template.sendBody("direct:commit", null);
    template.sendBody("direct:delete", "1234");
    template.sendBody("direct:commit", null);
Copy to Clipboard Toggle word wrap

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");
Copy to Clipboard Toggle word wrap
詳細は、これらのリソースを参照してください。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat