1

I want to use parameters for the script in UpdateRequest without success. Here is the source code:

        IUpdateRequest<People, People> updateRequest = new UpdateRequest<People, People>( indexName, "people", docId);
        updateRequest.RequestParameters.Script("ctx._source.age+=step");
        updateRequest.Params = new Dictionary<string, object>();
        updateRequest.Params.Add("step", 1);

        IUpdateResponse<People> updateResponse =  client.Update<People>(updateRequest);

This fails, if I do not use params it succeeds like this

        IUpdateRequest<People, People> updateRequest = new UpdateRequest<People, People>( indexName, "people", docId);
        updateRequest.RequestParameters.Script("ctx._source.age+=1");
        IUpdateResponse<People> updateResponse =  client.Update<People>(updateRequest);

looks like the params is not the correct place to put script params, what is the correct way to put params to the script?

Tony Yao
  • 55
  • 7

1 Answers1

1

Your request is not quite correct. You should set the Script property on updateRequest to the inline script

var indexName = "people";
var docId = 1;

var updateRequest = new UpdateRequest<People, People>(indexName, "people", docId)
{
    Script = "ctx._source.age+=step",
    Params = new Dictionary<string, object>
    {
        { "step", 1 }
    }
};

var updateResponse = client.Update<People>(updateRequest);

the request will look like

POST http://localhost:9200/people/people/1/_update?pretty=true 
{
  "script": "ctx._source.age+=step",
  "params": {
    "step": 1
  }
}
Russ Cam
  • 124,184
  • 33
  • 204
  • 266