2017-03-24 28 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代碼一個變量,然後作爲腳本參數。