Stats aggregation on list length

I'm trying to do a stats aggregation on the list length using a script but
I'm getting errors. For this data,

PUT test_groups/group/1
{
"name":"1",
"members":[
{
"name":"m1"
}
]
}

PUT test_groups/group/2
{
"name":"2",
"members":[
{
"name":"m1"
},
{
"name":"m2"
}
]
}

and this query:

GET test_groups/group/_search
{
"aggs": {
"group_members": {
"filter": {
"exists": {
"field": "members"
}
},
"aggs": {
"length": {
"stats": {
"script": "doc['members'].values.length"
}
}
}
}
}
}

I get an error stating that the members field does not exist in type group:

{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 3,
"failed": 2,
"failures": [
{
"index": "test_groups",
"shard": 2,
"status": 500,
"reason": "QueryPhaseExecutionException[[test_groups][2]:
query[ConstantScore(cache(_type:group))],from[0],size[10]: Query Failed
[Failed to execute main query]]; nested:
GroovyScriptExecutionException[ElasticsearchIllegalArgumentException[No
field found for [members] in mapping with types [group]]]; "
},
{
"index": "test_groups",
"shard": 3,
"status": 500,
"reason": "QueryPhaseExecutionException[[test_groups][3]:
query[ConstantScore(cache(_type:group))],from[0],size[10]: Query Failed
[Failed to execute main query]]; nested:
GroovyScriptExecutionException[ElasticsearchIllegalArgumentException[No
field found for [members] in mapping with types [group]]]; "
}
]
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
},
"aggregations": {
"group_members": {
"doc_count": 0,
"length": {
"count": 0,
"min": null,
"max": null,
"avg": null,
"sum": null
}
}
}
}

Is there a way to do this?

Best regards,

Jilles

--
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 elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/fcbce46c-6556-4e4e-b74a-2a4cbea915c6%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Hi,

Objects are flattened in index level. Nothing is indexed as “member” that’s why you get the exception.
Using doc[‘members.name'] instead of doc[‘members’] in script should work.

Masaru

On January 22, 2015 at 19:10:25, Jilles van Gurp (jillesvangurp@gmail.com) wrote:

I'm trying to do a stats aggregation on the list length using a script but
I'm getting errors. For this data,

PUT test_groups/group/1
{
"name":"1",
"members":[
{
"name":"m1"
}
]
}

PUT test_groups/group/2
{
"name":"2",
"members":[
{
"name":"m1"
},
{
"name":"m2"
}
]
}

and this query:

GET test_groups/group/_search
{
"aggs": {
"group_members": {
"filter": {
"exists": {
"field": "members"
}
},
"aggs": {
"length": {
"stats": {
"script": "doc['members'].values.length"
}
}
}
}
}
}

I get an error stating that the members field does not exist in type group:

{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 3,
"failed": 2,
"failures": [
{
"index": "test_groups",
"shard": 2,
"status": 500,
"reason": "QueryPhaseExecutionException[[test_groups][2]:
query[ConstantScore(cache(_type:group))],from[0],size[10]: Query Failed
[Failed to execute main query]]; nested:
GroovyScriptExecutionException[ElasticsearchIllegalArgumentException[No
field found for [members] in mapping with types [group]]]; "
},
{
"index": "test_groups",
"shard": 3,
"status": 500,
"reason": "QueryPhaseExecutionException[[test_groups][3]:
query[ConstantScore(cache(_type:group))],from[0],size[10]: Query Failed
[Failed to execute main query]]; nested:
GroovyScriptExecutionException[ElasticsearchIllegalArgumentException[No
field found for [members] in mapping with types [group]]]; "
}
]
},
"hits": {
"total": 0,
"max_score": null,
"hits":
},
"aggregations": {
"group_members": {
"doc_count": 0,
"length": {
"count": 0,
"min": null,
"max": null,
"avg": null,
"sum": null
}
}
}
}

Is there a way to do this?

Best regards,

Jilles

--
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 elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/fcbce46c-6556-4e4e-b74a-2a4cbea915c6%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
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 elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/etPan.54c1ac3b.7fdcc233.1877%40citra.local.
For more options, visit https://groups.google.com/d/optout.

Thanks! Now it works.

Best,

Jilles

On Friday, January 23, 2015 at 3:04:55 AM UTC+1, Masaru Hasegawa wrote:

Hi,

Objects are flattened in index level. Nothing is indexed as “member”
that’s why you get the exception.
Using doc[‘members.name'] instead of doc[‘members’] in script should
work.

Masaru

On January 22, 2015 at 19:10:25, Jilles van Gurp (jilles...@gmail.com
<javascript:>) wrote:

I'm trying to do a stats aggregation on the list length using a script
but
I'm getting errors. For this data,

PUT test_groups/group/1
{
"name":"1",
"members":[
{
"name":"m1"
}
]
}

PUT test_groups/group/2
{
"name":"2",
"members":[
{
"name":"m1"
},
{
"name":"m2"
}
]
}

and this query:

GET test_groups/group/_search
{
"aggs": {
"group_members": {
"filter": {
"exists": {
"field": "members"
}
},
"aggs": {
"length": {
"stats": {
"script": "doc['members'].values.length"
}
}
}
}
}
}

I get an error stating that the members field does not exist in type
group:

{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 3,
"failed": 2,
"failures": [
{
"index": "test_groups",
"shard": 2,
"status": 500,
"reason": "QueryPhaseExecutionException[[test_groups][2]:
query[ConstantScore(cache(_type:group))],from[0],size[10]: Query Failed
[Failed to execute main query]]; nested:
GroovyScriptExecutionException[ElasticsearchIllegalArgumentException[No

field found for [members] in mapping with types [group]]]; "
},
{
"index": "test_groups",
"shard": 3,
"status": 500,
"reason": "QueryPhaseExecutionException[[test_groups][3]:
query[ConstantScore(cache(_type:group))],from[0],size[10]: Query Failed
[Failed to execute main query]]; nested:
GroovyScriptExecutionException[ElasticsearchIllegalArgumentException[No

field found for [members] in mapping with types [group]]]; "
}
]
},
"hits": {
"total": 0,
"max_score": null,
"hits":
},
"aggregations": {
"group_members": {
"doc_count": 0,
"length": {
"count": 0,
"min": null,
"max": null,
"avg": null,
"sum": null
}
}
}
}

Is there a way to do this?

Best regards,

Jilles

--
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 elasticsearc...@googlegroups.com <javascript:>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/elasticsearch/fcbce46c-6556-4e4e-b74a-2a4cbea915c6%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

--
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 elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/b3f877a9-633e-4fe8-b4ea-3869e833782f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.