如何在Painless脚本中计算地理距离(OpenSearch 1.0)



我在OpenSearch中有一些文档,其中有一个名为location的字段,这是一个地理点。我正在尝试编写一个排序脚本,该脚本考虑文档位置和其他任意位置之间的距离。如何在脚本中计算此距离?我在几年前发现了这个答案,它使用了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"
}

看起来distanceInKmdistanceInMiles不久前都被arcDistance(double lat, double lon)planeDistance(double lat, double lon)取代了,现在所有距离都以米为单位返回。

请参阅此处,以了解这两者的不同之处。

最新更新