'How to calculate geographic distance in a Painless script (OpenSearch 1.0)

I have some documents in OpenSearch with a field called location, which is a geo-point. I'm trying to write a sort script that takes into account the distance between the document's location, and some other arbitrary location. How do I calculate this distance inside the script? I found this answer from a few years ago, which uses the method distanceInKm. But when I tried it, it doesn't work. Here's my sort block:

  "sort": {
    "_script": {
      "type": "number",
      "order": "asc",
      "script": {
        "source": "return doc[\"location\"].distanceInKm(38.7819,-77.19);"
      }
    }
  }

(Yes, I realize that I don't need a script if I just want to sort by distance. This is a simplified example.)

From the response:

          "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"
          }


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source