tutorial query aws elasticsearch

query - ElasticSearch filtro de distancia geo con múltiples ubicaciones en matriz, ¿es posible?



elasticsearch query (2)

¿Especificó un mapeo geo_point para su documento?

curl -XDELETE ''http://localhost:9200/twitter/'' curl -XPUT ''http://localhost:9200/twitter/'' curl -XPUT ''http://localhost:9200/twitter/tweet/_mapping'' -d '' { "tweet" : { "properties" : { "locations" : {"type" : "geo_point"} } } }'' curl -XPUT ''http://localhost:9200/twitter/tweet/1'' -d '' { "user": "kimchy", "postDate": "2009-11-15T13:12:00", "message": "Trying out Elastic Search, so far so good?", "locations" : [{ "lat" : 50.00, "lon" : 10.00 }, { "lat" : 40.00, "lon" : 9.00 }] }'' curl -XPUT ''http://localhost:9200/twitter/tweet/2'' -d '' { "user": "kimchy", "postDate": "2009-11-15T13:12:00", "message": "Trying out Elastic Search, so far so good?", "locations" : [{ "lat" : 30.00, "lon" : 8.00 }, { "lat" : 20.00, "lon" : 7.00 }] }'' curl -XGET ''http://localhost:9200/twitter/tweet/_search'' -d ''{ "query": { "filtered" : { "query" : { "match_all" : {} }, "filter" : { "geo_distance" : { "distance" : "20km", "tweet.locations" : { "lat" : 40.00, "lon" : 9.00 } } } } } }''

Digamos que tenemos un montón de documentos en un índice de ElasticSearch. Cada documento tiene múltiples ubicaciones en una matriz , como esta:

{ "name": "foobar", "locations": [ { "lat": 40.708519, "lon": -74.003212 }, { "lat": 39.752609, "lon": -104.998100 }, { "lat": 51.506321, "lon": -0.127140 } ] }

De acuerdo con la guía de referencia ElasticSearch.

geo_distance filtro geo_distance puede funcionar con múltiples ubicaciones / puntos por documento. Una vez que una única ubicación / punto coincida con el filtro, el documento se incluirá en el filtro.

Entonces, ¿es posible crear un filtro de distancia geo que verifique todas las ubicaciones en la matriz?

Esto no parece funcionar, desafortunadamente:

{ "filter": { "geo_distance": { "distance": "100 km", "locations": "40, -105" } } }

arroja " QueryParsingException[[myIndex] failed to find geo_point field [locations] " ya que las locations no son un solo geo_point sino una matriz de geo_point s.


Para Elasticsearch versión 5.1, para el mismo índice anterior, la consulta irá de esta manera,

curl -XGET ''http://localhost:9200/twitter/tweet/_search'' -d '' { "query": { "bool": { "must": { "match_all": {} }, "filter": { "geo_distance": { "distance": "200km", "locations": { "lat": 40.00, "lon": 9.00 } } } } } }''