ElasticSearch geo_bounding_box coordinate format


(JeffLocke) #1

I was following the guide online to represent coordinates as "lat, lng" but
it doesnt seem to be working until I flip everything around to "lng, lat".
I even have to flip around top_left and bottom_right in order for the query
to work.

Is anyone experiencing the same problem? Clearly this is not how the
documentation says to use it, but it's only working when I format it this
way.

Rails format

def self.search(params)
tire.search( page: params[:page], per_page: 2 ) do
query { all }
filter :geo_bounding_box, location: { top_left: "
-121.88596979687497, 37.33588487375733", bottom_right: "
-122.43528620312497, 37.553946238118264" }
end
end

CURL format

curl -X GET
"http://localhost:9200/articles/article/_search?page=&per_page=2&size=2&pretty=true"
-d
'{"query":{"match_all":{}},"facets":{"condition":{"terms":{"field":"condition","size":10,"all_terms":false}}},"filter":{"geo_bounding_box":{"location":{"top_left":"
-121.88596979687497, 37.33588487375733","bottom_right":"
-122.43528620312497, 37.553946238118264"}}},"size":2}'

Console response

{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 169,
"max_score" : 1.0,
"hits" : [ {
"_index" : "articles",
"_type" : "article",
"_id" : "4f72bc7d0bdb820f02000002",
"_score" : 1.0, "_source" : {"content":"words
here!","location":[37.444995,-122.160628],"name":"harro"}
}, {
"_index" : "articles",
"_type" : "article",
"_id" : "4fdf0cf20bdb82336c000002",
"_score" : 1.0, "_source" : {"content":"Run of the
mill","location":[37.33588487375733,-121.88596979687497],"name":"Billy Bob"}
} ]
},
"facets" : {
"condition" : {
"_type" : "terms",
"missing" : 5597,
"total" : 0,
"other" : 0,
"terms" : [ ]
}
}


(Igor Motov) #2

String representation of geo point and array representation of geo point
are using different formats. The string representation is using "lat,lon"
format while array representation is using [lon, lat] format. You are using
strings in query and arrays in data. That's why you are getting
strange results. See
http://www.elasticsearch.org/guide/reference/mapping/geo-point-type.html

On Wednesday, June 20, 2012 8:57:08 PM UTC-4, Jeff Locke wrote:

I was following the guide online to represent coordinates as "lat, lng"
but it doesnt seem to be working until I flip everything around to "lng,
lat". I even have to flip around top_left and bottom_right in order for the
query to work.

Is anyone experiencing the same problem? Clearly this is not how the
documentation says to use it, but it's only working when I format it this
way.

Rails format

def self.search(params)
tire.search( page: params[:page], per_page: 2 ) do
query { all }
filter :geo_bounding_box, location: { top_left: "
-121.88596979687497, 37.33588487375733", bottom_right: "
-122.43528620312497, 37.553946238118264" }
end
end

CURL format

curl -X GET "
http://localhost:9200/articles/article/_search?page=&per_page=2&size=2&pretty=true"
-d
'{"query":{"match_all":{}},"facets":{"condition":{"terms":{"field":"condition","size":10,"all_terms":false}}},"filter":{"geo_bounding_box":{"location":{"top_left":"
-121.88596979687497, 37.33588487375733","bottom_right":"
-122.43528620312497, 37.553946238118264"}}},"size":2}'

Console response

{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 169,
"max_score" : 1.0,
"hits" : [ {
"_index" : "articles",
"_type" : "article",
"_id" : "4f72bc7d0bdb820f02000002",
"_score" : 1.0, "_source" : {"content":"words
here!","location":[37.444995,-122.160628],"name":"harro"}
}, {
"_index" : "articles",
"_type" : "article",
"_id" : "4fdf0cf20bdb82336c000002",
"_score" : 1.0, "_source" : {"content":"Run of the
mill","location":[37.33588487375733,-121.88596979687497],"name":"Billy Bob"}
} ]
},
"facets" : {
"condition" : {
"_type" : "terms",
"missing" : 5597,
"total" : 0,
"other" : 0,
"terms" : [ ]
}
}


(system) #3