2016-05-12 4 views
0

Garyを含むフィールド名がある特定のドキュメントを特に更新するクエリの更新を実行します。私はelasticsearch(2.3)の最新版を使用しています。私はnodejsの公式のESクライアントを使用しています。これを行う別の手段を提供する(文書を見つける、文書内の特定のフィールドを更新する)ことは正解として受け入れられる。elasticsearch-js(または他の手段)を使用したクエリに基づいてドキュメントを更新するにはどうすればよいですか?

+0

これはまだリリースされていません。これはJavascriptクライアントライブラリの[2.3 APIバージョンで利用可能](https://github.com/elastic/elasticsearch-js/blob/master/src/lib/apis/2_3.js#L6463-L6709)になります。現在、JSクライアントは 'apiVersion:2.2'までしかサポートしていません – Val

+0

既存のアプリケーションのフィールドを更新する必要があります。これを達成するために私ができる代替方法はありますか? – Rolando

+0

1回限りの必要がある場合は、[REST APIを介してカール](https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query)で行うことができます。 html)を使用してください。 – Val

答えて

2

これはJavaScriptクライアントではまだリリースされていません。これは、Javascriptクライアントライブラリの2.3 APIバージョンで利用できます。現在、JSクライアントはapiVersionまでしかサポートしていません:2.2

任意のHTTPクライアント(郵便配達員、カール、/ヘッド/センス、...)を使用してRESTエンドポイントをヒットし、必要。

あなたはNode.jsのを介してこれを行うために必要がある場合、あなたはこのようhttpモジュールを使用することができます。

var http = require('http'); 

var options = { 
    host: 'localhost', 
    port: 9200, 
    path: '/your_index/your_type/_update_by_query', 
    method: 'POST' 
}; 

var req = http.request(options, function(resp){ 
    resp.on('data', function(chunk){ 
    // check update response 
    }); 
}).on("error", function(e){ 
    console.log("Got error: " + e.message); 
}); 

var query = { 
    "script": { 
    "inline": "ctx._source.field = 'value2'" 
    }, 
    "query": { 
    "term": { 
     "field": "value1" 
    } 
    } 
}; 

// write data to request body 
req.write(JSON.stringify(query)); 
req.write('\n'); 
req.end(); 
+0

これを試すことができましたか? – Val

+0

ここで私は1)インデックス、2)タイプを指定しますか? – Rolando

+0

あなたは 'path'でそれらを指定することができます、私は答えを更新しました。 – Val

関連する問題