I am using Elasticsearch 1.4.4.

I am defining a parent-child index with three levels (grandparents) 
following the instructions in the document:
https://www.elastic.co/guide/en/elasticsearch/guide/current/grandparents.html

My structure is
Continent -> Country -> Region

MAPPING
--------------
I create an index with the following mapping:

curl -XPOST 'localhost:9200/geo' -d'
{
  "mappings": {
    "continent": {},
    "country": {
      "_parent": {
        "type": "continent" 
      }
    },
    "region": {
      "_parent": {
        "type": "country" 
      }
    }
  }
}' 

INDEXING
--------------
I index three entities:

curl -XPOST 'localhost:9200/geo/continent/europe' -d'
{
    "name":"Europe"
}'

curl -XPOST 'localhost:9200/geo/country/italy?parent=europe' -d'
{
    "name":"Italy"
}'

curl -XPOST 
'localhost:9200/geo/region/lombardy?parent=italy&routing=europe' -d'
{
    "name":"Lombardia"
}'

QUERY THAT WORKS
--------------------------------
If I query and aggregate according to the document everything works fine:

curl -XGET 'localhost:9200/geo/continent/_search?pretty=true' -d '
{
    "query": {
        "has_child": {
            "type": "country",
            "query": {
                "has_child": {
                "type": "region",
                    "query": {
                        "match": {
                            "name": "Lombardia"
                        }
                    }
                }
            }
        }
    },
    "aggs": {
        "country": {
            "terms": { 
                "field": "name"
            },
            "aggs": {
                "countries": {
"children": {
"type": "country"
},
"aggs": {
"country_names" : {
"terms" :  {
    "field" : "country.name"
}
}                   
}
}
}
        }
    }
}'

QUERY THAT DOES NOT WORK
-----------------------------------------------
However, if I try with multi-level aggregations like in:

curl -XGET 'localhost:9200/geo/continent/_search?pretty=true' -d '
{
    "query": {
        "has_child": {
            "type": "country",
            "query": {
                "has_child": {
                "type": "region",
                    "query": {
                        "match": {
                            "name": "Lombardia"
                        }
                    }
                }
            }
        }
    },
    "aggs": {
        "continent_names": {
            "terms": { 
                "field": "name"
            },
            "aggs": {
                "countries": {
"children": {
"type": "country"
}, 
"aggs": {
"regions": {
"children": {
"type": "region"
}, 
"aggs": {
"region_names" : {
"terms" :  {
"field" : "region.name"
}
}
}
}
}
}
}
        }
    }
}'

I get back the following

{

  "error" : "SearchPhaseExecutionException[Failed to execute phase [query], 
all shards failed; shardFailures {[b5CbW5byQdSSW-rIwta0rA][geo][0]: 
QueryPhaseExecutionException[[geo][0]: 
query[filtered(child_filter[country/continent](filtered(child_filter[region/country](filtered(name:lombardia)->cache(_type:region)))->cache(_type:country)))->cache(_type:continent)],from[0],size[10]:
 
Query Failed [Failed to execute main query]]; nested: NullPointerException; 
}{[b5CbW5byQdSSW-rIwta0rA][geo][1]: QueryPhaseExecutionException[[geo][1]: 
query[filtered(child_filter[country/continent](filtered(child_filter[region/country](filtered(name:lombardia)->cache(_type:region)))->cache(_type:country)))->cache(_type:continent)],from[0],size[10]:
 
Query Failed [Failed to execute main query]]; nested: NullPointerException; 
}{[b5CbW5byQdSSW-rIwta0rA][geo][2]: QueryPhaseExecutionException[[geo][2]: 
query[filtered(child_filter[country/continent](filtered(child_filter[region/country](filtered(name:lombardia)->cache(_type:region)))->cache(_type:country)))->cache(_type:continent)],from[0],size[10]:
 
Query Failed [Failed to execute main query]]; nested: NullPointerException; 
}{[b5CbW5byQdSSW-rIwta0rA][geo][3]: QueryPhaseExecutionException[[geo][3]: 
query[filtered(child_filter[country/continent](filtered(child_filter[region/country](filtered(name:lombardia)->cache(_type:region)))->cache(_type:country)))->cache(_type:continent)],from[0],size[10]:
 
Query Failed [Failed to execute main query]]; nested: NullPointerException; 
}{[b5CbW5byQdSSW-rIwta0rA][geo][4]: QueryPhaseExecutionException[[geo][4]: 
query[filtered(child_filter[country/continent](filtered(child_filter[region/country](filtered(name:lombardia)->cache(_type:region)))->cache(_type:country)))->cache(_type:continent)],from[0],size[10]:
 
Query Failed [Failed to execute main query]]; nested: NullPointerException; 
}]",

  "status" : 500

}

The 'grandparents' document says: "Querying and aggregating across 
generations works, as long as you step through each generation."

How do I get the last query and aggregation to work across all three levels 
of the index?

What am I missing?

Thank you,
Paolo

-- 
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/f4426a7b-124e-450e-98c0-cc43cf7f9c6b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to