Search code examples
elasticsearchelasticsearch-6elasticsearch-dsl-py

Units of an elasticsearch query to get distance from arbitrary point to Geopoint


I have a django project which uses elasticsearch 6.5.3 to index products in a store with locations as GeoPoints. I am trying to query this index and also calculate distance between an arbitrary point, say user's location to each oh these results.

I am using elasticsearch_dsl and my code looks something like this:

search_query = search_query.script_fields(distance={
'script':{
    'inline':"doc['location'].arcDistance(params.lat, params.lon)", 
    'params': {
        'lat':user_loc.lat, 
        'lon':user_loc.lon
        }
    }
})
for result in search_query.execute():
    print(result.distance)

Which gives me values that looks like:

[123456.456879123]

But I'm not sure about its units. By using and online distance calculator in https://www.nhc.noaa.gov/gccalc.shtml, which gives me the distance as ~123km, It looks like value is in meters.

So:

1. Where can I find some definitive answers about its units?

Please point me to the relevant documentation for these methods. I am also interested to know if there is a way to specify the units expected for the results in the method call.

2. Is there a better way to do this in python?


Solution

  • The units are those returned by the arcDistance method providing the value in your script.

    The arc distance (in meters) of this geo point field from the provided lat/lon

    The painless docs leave a lot to be desired (there appears to be no docs on this method in 6.5). The quote above was obtained from here: https://www.elastic.co/guide/en/elasticsearch/reference/2.3/modules-scripting.html

    Additionally, they mention arcDistance caluclates meters here: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/breaking_50_scripting.html