My goal is to validate that the geo points of indexed cities are contained 
within the multipolygon boundary of their corresponding country.

I have using the following as an initial guide: 
 
http://people.mozilla.org/~wkahngreene/elastic/guide/reference/query-dsl/geo-shape-filter.html

So the city index looks like:

$ curl -XPUT http://localhost:9200/points -d '                             
                                                                       
{
    "mappings": {
        "city": {
            "properties": {
                "city": {"type": "string"},
                "country": {"type": "string"},
                "location": {"type": "geo_shape"}
            }
        }
    }
}
'

$ curl -XPOST http://localhost:9200/points/city/ -d '{"city": "Tokyo", 
"country": "Japan","location": {"type" : "point", "coordinates" : 
[139.6917, 35.6895]}}'

$ curl -XPUT http://localhost:9200/shapes -d '
{
    "mappings": {
        "country": {
            "properties": {
                "name": {"type": "string"},
                "shape": {"type": "geo_shape"}
            }
        }
    }
}
'

$ curl -XPOST http://localhost:9200/shapes/country/ -d 
'{"name":"Japan","shape":{"type":"multipolygon","coordinates":[[[[134.638428,34.149234],[134.766379,33.806335],[134.203416,33.201178],[133.79295,33.521985],[133.280268,33.28957],[133.014858,32.704567],[132.363115,32.989382],[132.371176,33.463642],[132.924373,34.060299],[133.492968,33.944621],[133.904106,34.364931],[134.638428,34.149234]]],[[[140.976388,37.142074],[140.59977,36.343983],[140.774074,35.842877],[140.253279,35.138114],[138.975528,34.6676],[137.217599,34.606286],[135.792983,33.464805],[135.120983,33.849071],[135.079435,34.596545],[133.340316,34.375938],[132.156771,33.904933],[130.986145,33.885761],[132.000036,33.149992],[131.33279,31.450355],[130.686318,31.029579],[130.20242,31.418238],[130.447676,32.319475],[129.814692,32.61031],[129.408463,33.296056],[130.353935,33.604151],[130.878451,34.232743],[131.884229,34.749714],[132.617673,35.433393],[134.608301,35.731618],[135.677538,35.527134],[136.723831,37.304984],[137.390612,36.827391],[138.857602,37.827485],[139.426405,38.215962],[140.05479,39.438807],[139.883379,40.563312],[140.305783,41.195005],[141.368973,41.37856],[141.914263,39.991616],[141.884601,39.180865],[140.959489,38.174001],[140.976388,37.142074]]],[[[143.910162,44.1741],[144.613427,43.960883],[145.320825,44.384733],[145.543137,43.262088],[144.059662,42.988358],[143.18385,41.995215],[141.611491,42.678791],[141.067286,41.584594],[139.955106,41.569556],[139.817544,42.563759],[140.312087,43.333273],[141.380549,43.388825],[141.671952,44.772125],[141.967645,45.551483],[143.14287,44.510358],[143.910162,44.1741]]]]}}'

I can explicitly query against a particular country as follows:

$ curl -XGET 'http://localhost:9200/points/city/_search?pretty=true' -d '   
                                                                            
            
{
  "query": {
    "filtered" : {
        "query" : {
            "match_all" : {}
        },
        "filter" : {
            "geo_shape" : {
                "location" : {
                    "indexed_shape": {
                        "id": "odsm2vWgT7ufBLjvmRMrNA",
                        "type": "country",
                        "index": "shapes",
                        "shape_field_name": "shape"
                    },
                    "relation": "within"
                }
            }
        }
    }
  }
}'

But is there a way that I can query that the city's country property 
matches the country's name property and the city's location is within the 
country's shape?

Thanks for any insights!

-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elasticsearch/806c4845-24c7-442b-b5fa-d66e0fca68d5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to