4

私は jdbc リバー プラグインを使用してエラスティック検索リバーをセットアップしています。これは単純な select * from を実行し、そのテーブルにインデックスを付けます。

しかし、API を介してオンデマンドで、標準の時間間隔でリバーをトリガーできるようにしたいと考えています。これにより、このテーブルに挿入されたドキュメントにインデックスを付けることができます。

とにかく現時点でこれを行う方法があるかどうかは誰にもわかりませんか?

すなわち /_river/my_river/_refresh

ありがとう。

4

4 に答える 4

1

JDBC River をトリガーして、更新された特定のドキュメントをリアルタイムでインデックス化する良い方法がわかりません。

JDBC リバーをトリガーしてドキュメントのインデックスを作成する代わりに、更新コードからドキュメントのインデックスを作成してみませんか?

JDBC リバーは大量のデータ ストリームをフィードする優れた方法であり、ポーリングとの一貫性を維持するためのドキュメントがあります。しかし、リアルタイムの要件を満たすのは簡単ではないと思います。

于 2012-08-06T04:56:54.653 に答える
0

古典的な「プッシュ対プル」のインデックス作成の問題に苦労しているようです。リバーは、一定間隔でデータベースからデータを引き出すように設計されています。セットアップは簡単ですが、コンピューター サイエンスのすべてのことと同様に、トレードオフがあります。具体的には、リアルタイムのインデックス作成が失われます。トリガーできる川は、両方の長所を持っている場合もあれば、不要なトラフィックが大量にサーバーに殺到する場合もあります (つまり、どのドキュメントが更新されたかが正確にわかっているのに、なぜ「SELECT * ...」を実行するのでしょうか?)。

リアルタイムのインデックス作成が必要な場合 (私のように)、更新を Elasticsearch に「プッシュ」します。更新されたレコードが保存されたときに Elasticsearch に配信する Elasticsearch クライアントを作成するだけです。FWIW、サービスバスでメッセージを発行することでこの問題を解決し、反対側で待機しているサービスが SQL からエンティティを取得してインデックスを作成しました。そのインフラストラクチャがあれば、小さなアプリを作成して SQL データの初期インポートを実行したり、データのインデックスを作成するスケジュールされたジョブを作成したりすることは大したことではありません。

于 2015-04-08T05:19:27.847 に答える
0

ご提案いただきありがとうございます。フィードバックをお寄せください。elasticsearch コミュニティに参加してください。https://github.com/jprante/elasticsearch-river-jdbc/issuesでフェッチをトリガーするための問題を開きます

于 2012-08-06T22:01:00.103 に答える
-1

代わりに、jdbc プラグインで logstash を使用します

https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html

  1. ログスタッシュをダウンロード
  2. input-jdbc-plugin をインストールする

構成例:

    input {
            jdbc {
                    jdbc_connection_string => "jdbc:oracle:thin:@localhost:1521:XE"
                    jdbc_user => "user"
                    jdbc_driver_library => "/home/logstash/lib/ojdbc6.jar"
                    jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
                    statement => "select * from events where update_date > :sql_last_value order by update_date"
                    last_run_metadata_path => "run_metadata_event.log"
                    schedule => "* * * * *"
                    jdbc_password => "password"
            }
    }
    # The filter part of this file is commented out to indicate that it is
    # optional.
    filter {
           mutate {
                   split => { "field_1" => ";"}

           }
    }

    output {
        elasticsearch {
            #protocol => "http"
            hosts => ["localhost:9200"]
            index => "items"
            document_type => "doc_type"
            document_id => "%{doc_id}"
        }
    }
于 2016-11-05T08:37:56.113 に答える