2016-07-12 3 views
1

Logstash jdbcプラグインが5分ごとにSQLクエリを使用してデータを取得し、ElasticSearch出力プラグインが入力プラグインのデータをElasticSearchサーバーに配置するデータパイプラインを作成しようとしています。つまり、この出力プラグインをElasticSearchサーバーの既存のドキュメントを部分更新する必要があります。私Logstash設定ファイルは次のようになります。Logstash設定:ElastciSearch出力プラグインから部分更新APIを呼び出す方法は?

input { 
    jdbc { 
     jdbc_driver_library => "/Users/hello/logstash-2.3.2/lib/mysql-connector-java-5.1.34.jar" 
     jdbc_driver_class => "com.mysql.jdbc.Driver" 
     jdbc_connection_string => "jdbc:mysql://localhost:13306/mysqlDB” 
     jdbc_user => “root” 
     jdbc_password => “1234” 
     last_run_metadata_path => "/Users/hello/.logstash_last_run_display" 
     statement => "SELECT * FROM checkout WHERE checkout_no between :sql_last_value + 1 and :sql_last_value + 5 ORDER BY checkout_no ASC" 
     schedule => “*/5 * * * *" 
     use_column_value => true 
     tracking_column => “checkout_no” 
    } 
} 

output { 
    stdout { codec => json_lines } 

    elasticsearch { 
     action => "update" 
     index => "ecs" 
     document_type => “checkout” 
     document_id => “%{checkout_no}" 
     hosts => ["localhost:9200"] 
    } 
} 

問題はElasticSearch出力プラグインは、/ {インデックス}/{形}/{ID}/_更新などの部分更新のAPIを呼び出すことがないように見えるということです。マニュアルには、index,deletecreateupdateなどのアクションがリストされていますが、どのアクションにもREST API URL、つまりupdateアクションが{{}}/{type}/{id}/_ updateまたは/ {index}/{type}/{id} api(upsert)。私は弾力的な検索出力プラグインから部分的な更新APIを呼びたいのですか?出来ますか?

答えて

6

Elasticsearch出力プラグインはElasticsearch更新APIのものに対応upsert一連のオプションを有していますdoc_as_upsert => true、action => "update"は本番スクリプトで動作します。

output { 

    elasticsearch { 
    hosts => ["es_host"] 
    document_id => "%{id}" # !!! the id here MUST be the same 
    index => "logstash-my-index" 
    timeout => 30 
    workers => 1 
    doc_as_upsert => true 
    action => "update" 
    } 
} 
3
+0

このマニュアルはまだ私を混乱させる。私は、ElasticSearchサーバー内のドキュメントにexSitingするいくつかのjsonキーをドキュメントIDで追加したいと思います。この場合、どのオプションを使用しますか? – inherithandle

+0

'doc_as_upsert => true'を追加すれば十分だと思います。 –

関連する問題