I got it figured out. There's no .values.  What was really helpful was to 
debug using script_fields

{
  "query": {
    "ids": {
      "values": ["myid"]
    }
  },
  "script_fields" : {
    "test1" : {
      "script": "_source?.myfield",
      "lang": "groovy"
    },
    "test2" : {
      "script": "int i = 0; for (value in _source['myfield']) { if 
(!value.exclude) { i++; } }; i",
      "lang": "groovy"
    }
  }
}




On Monday, November 17, 2014 3:37:00 PM UTC-8, Ben McCann wrote:
>
> Hi,
>
> I have a document which has an array of objects as a field. I'd like to 
> count the length of this array filtering on an attribute of the objects, 
> but am having a really hard time.
>
> E.g. I'd like to use a script to create a computed field with a value of 3 
> for this document:
> {
>   myfield: [{
>       value: 'a'
>     }, {
>       value: 'b'
>       exclude: true
>     }, {
>       value: 'c'
>     }, {
>       value: 'd'
>   }]
> }
>
> There are two general approaches I've thought of. The first would be:
>
> ctx._source['newfield'] = ctx._source['myfield'].values.size() - 
> ctx._source['myfield.exclude'].values.size();
>
>
> The second approach could be something like:
>
> i = 0; for (value in ctx._source['myfield']?.values) { if(!value.exclude) 
> { i++; } }; ctx._source['newfield'] = i
>
>
> Do either of these sound like an approach I should focus on over the 
> other? Is one likely to be much faster or impossible? I've not had any luck 
> with either route thus far.
>
> Thanks,
> Ben
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elasticsearch/ab59dfd7-3002-4f3e-9571-8ec3dc5cd70b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to