Cédric ZUGER
Cédric ZUGER

Reputation: 422

Elasticsearch : Set the number of the elements of an array in a field

I'm trying to store the number of elements of an array into a field with an update. (updating the record with the count of the array).

Like for example

{
  array = [ { "a" : "b" }, { "c" : "d" } ]
  nb_elements = 2
}

I have tried an update with the following script

{
  "script" : "ctx._source.nb_elements= ctx._source.array.values.length"
}

But it don't work. I also tried :

{
"script" : "ctx._source.nb_elements = count",
"params" : {
   "count" : ctx._source.array.values.length
   }
}

But i wasn't more successfull.

Does anybody know if this is possible and if, how to do it ?

Upvotes: 1

Views: 164

Answers (1)

moliware
moliware

Reputation: 10278

First of all you need to enable dynamic scripting by adding script.disable_dynamic: false to your config file.

Secondly, I'm supposing that you are using groovy (It's the default scripting language from 1.4).

Using the update api with this script should work:

{
  "script": "ctx._source.nb_elements=ctx._source.array.size"
}

Upvotes: 1

Related Questions