0

我有一个 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中的在线距离计算器,我得到的距离约为 123 公里,看起来价值以米为单位。

所以:

1. 我在哪里可以找到有关其单位的一些明确答案?

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

2.在python中有没有更好的方法来做到这一点?

4

2 回答 2

1

单位是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/break_50_scripting.html

于 2018-12-31T13:34:35.577 回答
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' 查询是获取弹性搜索索引的两个地理点之间距离的最简单方法。我认为您不需要使用脚本来实现这一目标。

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

在需要指定距离的地方,例如地理距离查询中的距离参数),如果没有指定,则默认单位是米。

于 2018-12-31T12:58:06.180 回答