Elasticsearch查询的单位,以获取任意点到Geopoint的距离

时间:2018-12-30 05:27:51

标签: elasticsearch elasticsearch-6 elasticsearch-dsl-py

我有一个django项目,该项目使用 elasticsearch 6.5.3 为位置为GeoPoints的商店中的产品编制索引。我正在尝试查询该索引,并还计算任意点之间的距离,比如说用户的位置到这些结果。

我正在使用elasticsearch_dsl,我的代码如下所示:

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)

这给了我以下值:

[123456.456879123]

但是我不确定其单位。 通过使用https://www.nhc.noaa.gov/gccalc.shtml中的在线距离计算器, 这使我的距离为〜123km, 看起来价值以米为单位。

所以:

1。在哪里可以找到有关其单位的明确答案?

请为我指出这些方法的相关文档。 我也很想知道是否有一种方法可以在方法调用中指定结果的预期单位。

2。有没有更好的方法可以在python中做到这一点?

2 个答案:

答案 0 :(得分:0)

我不确定确切的python API,但elasticsearch具有地理距离查询: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-distance-query.html

在:https://github.com/elastic/elasticsearch-dsl-py/issues/398中,有一个使用ES API的python示例:

MyDocType.search().filter(
'geo_distance', distance='1000m', location={"lat": "40", "lon": "-74"}
)

“ geo_distance”查询是获取索引到elasticsearch的两个地理位置之间距离的最简单方法。我认为您无需使用脚本即可实现这一目标。

关于距离单位,您怀疑默认单位是米。从: https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#distance-units

  

无论需要指定距离,例如“地理距离查询”中的distance参数),如果未指定,则默认单位为米。

答案 1 :(得分:0)

单位是通过arcDistance方法返回的单位,在脚本中提供了值。

  

此地理位置点到提供的纬度/经度的弧距离(以米为单位)

无痛的文档还有很多不足之处(在6.5中似乎没有关于此方法的文档)。上面的引用是从这里获得的:https://www.elastic.co/guide/en/elasticsearch/reference/2.3/modules-scripting.html

此外,他们在这里提到arcDistance来计算米:https://www.elastic.co/guide/en/elasticsearch/reference/5.5/breaking_50_scripting.html