2017-03-24 10 views
0

解決したい状況は、elasticsearchのnodejsドライバを使用して、特定のパラメータに一致するタイトルでタイトルインデックスのドキュメントを更新することです。私が使用している現在のクエリは、このnodejsドライバを使用してelasticsearchインラインスクリプトに引数を渡すにはどうすればよいですか?

client.updateByQuery({ 
     index: "title", 
     type: "type", 
     body: { 
      "query": { 
      "bool": { 
       "filter": [ 
       { "term": { "tvSeriesId": 123} }, 
       { "term": { "tvSeriesNumber": 456} } 
       ] 
      } 
      }, 
      "script": { 
      "inline": "ctx._source.someRandomField = 'abc'" 
      } 
     } 
    }, function(err, res) { 
     if (err) { 
      reportError(err) 
     } 
     cb(err, res) 
    } 
) 

は私がフィールドの値を変更するには、スクリプトに値を渡すことができる場所スクリプトが動的になりたいです。たとえば、someRandomFieldの値は、クエリ呼び出しの前の変数で宣言できます。その変数をスクリプトに渡すにはどうすればよいですか?

答えて

1

これを行うには、スクリプトparamsを使用することができます。

client.updateByQuery({ 
     index: "title", 
     type: "type", 
     body: { 
      "query": { 
      "bool": { 
       "filter": [ 
       { "term": { "tvSeriesId": 123} }, 
       { "term": { "tvSeriesNumber": 456} } 
       ] 
      } 
      }, 
      "script": { 
      "inline": "ctx._source.someRandomField = newValue" 
      "params": { 
       "newValue": newRandomFieldValue 
      } 
      } 
     } 
    }, function(err, res) { 
     if (err) { 
      reportError(err) 
     } 
     cb(err, res) 
    } 
) 

newRandomFieldValueは、スクリプトのパラメータとして使用されているあなたのNode.jsのコード内の変数になります。

関連する問題