第101章 Lucene


Lucene (Indexer および Search)コンポーネント

Apache Camel 2.2 で利用可能
lucene コンポーネントは Apache Lucene プロジェクトに基づいています。Apache Lucene は、Java で完全に記述された、高性能でフル機能のテキスト検索エンジンライブラリーです。Lucene の詳細は、以下のリンクを参照してください。
camel の lucene コンポーネントは、エンタープライズ統合パターンおよびシナリオで Lucene エンドポイントの統合および使用状況を容易にします。lucene コンポーネントは以下を行います。
  • ペイロードが Lucene エンドポイントに送信される際にドキュメントの検索可能なインデックスを構築します。
  • Apache Camel でのインデックス検索の実行を容易にする
このコンポーネントはプロデューサーエンドポイントのみをサポートします。

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 形式

lucene:searcherName:insert[?options]
lucene:searcherName:query[?options]
Copy to Clipboard Toggle word wrap
URI にクエリーオプションは ?option=value&option=value&.. の形式で追加できます。

オプションの挿入

Expand
名前 デフォルト値 説明
アナライザー StandardAnalyzer Analyzer は、テキストを分析する TokenStreams をビルドします。そのため、テキストからインデックス用語を抽出するポリシーを表します。analyzer の値は、抽象クラス org.apache.lucene.analysis.Analyzer を拡張する任意のクラスにすることができます。Lucene は、追加設定なしで豊富なアナライザーのセットも提供します。
indexDir ./indexDirectory 指定されたアナライザーによるドキュメントの分析時にインデックスファイルが作成されるファイルシステムディレクトリー
srcDir null プロデューサー起動時にインデックスに分析および追加するために使用されるファイルを含むオプションのディレクトリーです。

クエリーオプション

Expand
名前 デフォルト値 説明
アナライザー StandardAnalyzer Analyzer は、テキストを分析する TokenStreams をビルドします。そのため、テキストからインデックス用語を抽出するポリシーを表します。analyzer の値は、抽象クラス org.apache.lucene.analysis.Analyzer を拡張する任意のクラスにすることができます。Lucene は、追加設定なしで豊富なアナライザーのセットも提供します。
indexDir ./indexDirectory 指定されたアナライザーによるドキュメントの分析時にインデックスファイルが作成されるファイルシステムディレクトリー
maxHits 10 検索操作の結果セットを制限する整数値

メッセージヘッダー

Expand
ヘッダー 説明
QUERY インデックスで実行される Lucene クエリー。クエリーにはワイルドカードとフレーズが含まれる場合があります。
RETURN_LUCENE_DOCS Camel 2.15: ヒット情報を返すときに実際の Lucene ドキュメントを含めるには、このヘッダーを true に設定します。

Lucene プロデューサー

このコンポーネントは、2 つのプロデューサーエンドポイントをサポートします。
  • insert - 挿入プロデューサーは、受信エクスチェンジのボディーを分析し、それをトークン(content)に関連付けることで、検索可能なインデックスを構築します。
  • query: クエリープロデューサーは、事前に作成されたインデックスで検索を実行します。クエリーは、検索可能なインデックスを使用してスコアおよび関連性ベースの検索を実行します。受信エクスチェンジを介してクエリーを送信すると、QUERY というヘッダープロパティー名が含まれます。ヘッダープロパティー QUERY の値は Lucene クエリーです。Lucene クエリーを作成する方法は、 http://lucene.apache.org/java/3_0_0/queryparsersyntax.html を参照してください。

Lucene プロセッサー

プロデューサーを作成せずに lucene に対してクエリーを実行できる LuceneQueryProcessor と呼ばれるプロセッサーがあります。

例 1: Lucene インデックスの作成

RouteBuilder builder = new RouteBuilder() {
    public void configure() {
       from("direct:start").
           to("lucene:whitespaceQuotesIndex:insert?analyzer=#whitespaceAnalyzer&indexDir=#whitespace&srcDir=#load_dir").
           to("mock:result");
    }
};
Copy to Clipboard Toggle word wrap

例 2: Camel Context の JNDI レジストリーへのプロパティーのロード

@Override
protected JndiRegistry createRegistry() throws Exception {
  JndiRegistry registry =
         new JndiRegistry(createJndiContext());
  registry.bind("whitespace", new File("./whitespaceIndexDir"));
  registry.bind("load_dir",
        new File("src/test/resources/sources"));
  registry.bind("whitespaceAnalyzer",
        new WhitespaceAnalyzer());
  return registry;
}
...
CamelContext context = new DefaultCamelContext(createRegistry());
Copy to Clipboard Toggle word wrap

例 2: クエリープロデューサーを使用した検索の実行

RouteBuilder builder = new RouteBuilder() {
    public void configure() {
       from("direct:start").
          setHeader("QUERY", constant("Seinfeld")).
          to("lucene:searchIndex:query?analyzer=#whitespaceAnalyzer&indexDir=#whitespace&maxHits=20").
          to("direct:next");
                
       from("direct:next").process(new Processor() {
          public void process(Exchange exchange) throws Exception {
             Hits hits = exchange.getIn().getBody(Hits.class);
             printResults(hits);
          }

          private void printResults(Hits hits) {
              LOG.debug("Number of hits: " + hits.getNumberOfHits());
              for (int i = 0; i < hits.getNumberOfHits(); i++) {
                 LOG.debug("Hit " + i + " Index Location:" + hits.getHit().get(i).getHitLocation());
                 LOG.debug("Hit " + i + " Score:" + hits.getHit().get(i).getScore());
                 LOG.debug("Hit " + i + " Data:" + hits.getHit().get(i).getData());
              }
           }
       }).to("mock:searchResult");
   }
};
Copy to Clipboard Toggle word wrap

例 3: クエリープロセッサーを使用した検索の実行

RouteBuilder builder = new RouteBuilder() {
    public void configure() {            
        try {
            from("direct:start").
                setHeader("QUERY", constant("Rodney Dangerfield")).
                process(new LuceneQueryProcessor("target/stdindexDir", analyzer, null, 20)).
                to("direct:next");
        } catch (Exception e) {
            e.printStackTrace();
        }
                
        from("direct:next").process(new Processor() {
            public void process(Exchange exchange) throws Exception {
                Hits hits = exchange.getIn().getBody(Hits.class);
                printResults(hits);
            }
                    
            private void printResults(Hits hits) {
                LOG.debug("Number of hits: " + hits.getNumberOfHits());
                for (int i = 0; i < hits.getNumberOfHits(); i++) {
                    LOG.debug("Hit " + i + " Index Location:" + hits.getHit().get(i).getHitLocation());
                    LOG.debug("Hit " + i + " Score:" + hits.getHit().get(i).getScore());
                    LOG.debug("Hit " + i + " Data:" + hits.getHit().get(i).getData());
                }
            }
       }).to("mock:searchResult");
   }
};
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat