如何在 Painless 脚本中计算地理距离 (OpenSearch 1.0)
How to calculate geographic distance in a Painless script (OpenSearch 1.0)
我在 OpenSearch 中有一些文档有一个名为 location
的字段,它是一个地理点。我正在尝试编写一个排序脚本,该脚本考虑了文档位置与其他任意位置之间的距离。我如何在脚本中计算这个距离?我发现了几年前的this answer,它使用了distanceInKm
的方法。但是当我尝试它时,它不起作用。这是我的排序块:
"sort": {
"_script": {
"type": "number",
"order": "asc",
"script": {
"source": "return doc[\"location\"].distanceInKm(38.7819,-77.19);"
}
}
}
(是的,我意识到如果我只想按距离排序,我不需要脚本。这是一个简化的示例。)
来自回复:
"script_stack" : [
"return doc[\"location\"].distanceInKm(38.7819,-77.19);",
" ^---- HERE"
],
"script" : "return doc[\"location\"].distanceInKm(38.7819,-77.19);",
"lang" : "painless",
"position" : {
"offset" : 22,
"start" : 0,
"end" : 52
},
"caused_by" : {
"type" : "illegal_argument_exception",
"reason" : "dynamic method [org.opensearch.index.fielddata.ScriptDocValues.GeoPoints, distanceInKm/2] not found"
}
distanceInKm
和 distanceInMiles
似乎都在不久前被 arcDistance(double lat, double lon)
and planeDistance(double lat, double lon)
取代了 - 所有距离现在都以米为单位返回。
See here 了解这两者的区别。
我在 OpenSearch 中有一些文档有一个名为 location
的字段,它是一个地理点。我正在尝试编写一个排序脚本,该脚本考虑了文档位置与其他任意位置之间的距离。我如何在脚本中计算这个距离?我发现了几年前的this answer,它使用了distanceInKm
的方法。但是当我尝试它时,它不起作用。这是我的排序块:
"sort": {
"_script": {
"type": "number",
"order": "asc",
"script": {
"source": "return doc[\"location\"].distanceInKm(38.7819,-77.19);"
}
}
}
(是的,我意识到如果我只想按距离排序,我不需要脚本。这是一个简化的示例。)
来自回复:
"script_stack" : [
"return doc[\"location\"].distanceInKm(38.7819,-77.19);",
" ^---- HERE"
],
"script" : "return doc[\"location\"].distanceInKm(38.7819,-77.19);",
"lang" : "painless",
"position" : {
"offset" : 22,
"start" : 0,
"end" : 52
},
"caused_by" : {
"type" : "illegal_argument_exception",
"reason" : "dynamic method [org.opensearch.index.fielddata.ScriptDocValues.GeoPoints, distanceInKm/2] not found"
}
distanceInKm
和 distanceInMiles
似乎都在不久前被 arcDistance(double lat, double lon)
and planeDistance(double lat, double lon)
取代了 - 所有距离现在都以米为单位返回。
See here 了解这两者的区别。