如何在 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"
          }

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

See here 了解这两者的区别。