Looking at the documentation for the putScript
method, the main params are id
, lang
, and body
:
Having reviewed the POST _scripts/{id}
request examples, I expected the body
param to be expecting the same structure ({ "script": { "lang": "painless", "source": "Math.log(_score * 2) + params.my_modifier"}}
).
After a LOT of trial and error, I have a working example of what is expected (the documentation and the way the elasticsearch-js source code works, it was very difficult to determine what is needed). The documentation for the putScript
example should definitely be improved!
const elasticsearch = require('elasticsearch');
const client = new elasticsearch.Client({
host: 'localhost:9200',
log: 'trace',
apiVersion: '5.6'
});
client.putScript({
id: 'calculate-score',
lang: "painless",
body: {
script: "Math.log(_score * 2) + params.my_modifier"
}
});
Looking at the debug output, the example makes more sense because the actual endpoint being called by the client is (I haven't come across docs about this endpoint, only the POST version, linked above):
Elasticsearch INFO: 2018-08-09T14:33:10Z
Adding connection to http://localhost:9200/
Elasticsearch DEBUG: 2018-08-09T14:33:10Z
starting request {
"method": "PUT",
"path": "/_scripts/painless/calculate-score",
"body": {
"script": "Math.log(_score * 2) + params.my_modifier"
},
"query": {}
}
Elasticsearch TRACE: 2018-08-09T14:33:10Z
-> PUT http://localhost:9200/_scripts/painless/calculate-score
{
"script": "Math.log(_score * 2) + params.my_modifier"
}
<- 200
{
"acknowledged": true
}
Elasticsearch DEBUG: 2018-08-09T14:33:10Z
Request complete
I hope this helps somebody!