如何使用nodejs驱动程序将参数传递给elasticsearch内联脚本?

时间:2017-03-24 01:28:17

标签: node.js elasticsearch

我想要解决的情况是使用用于elasticsearch的nodejs驱动程序更新标题索引中具有与某些参数匹配的标题的文档。我正在使用的当前查询是

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 个答案:

答案 0 :(得分: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代码中的一个变量,然后将其用作脚本参数。