Hello,
I'm interested on how others have implemented the use-case that I'd like to
support.
USE CASE:
- For each document, a field called "geoloc" is available (most but not
all) which is a geopoint field. - On the front-end, each document, when geoloc, is available must
display the "distance" based on the user's geographical location (lat/lon) - Allow the user to sort by "nearest distance"
 
ISSUE: Based on my implementation (below), the geopoint distance() method
is returning a different value compared with what's being computed by the
sort handler. It's a discrepancy that I don't seem to understand.
ES version: 0.17.6
Sample Result (showing the discrepancy between sort and geodistance
computed fields):
  {
    "_shard": 4,
    "_node": "yDPteNQkT2e-JfWkdNVEnQ",
    "_index": "asoc",
    "_type": "business",
    "_id": "4fcf818695f08d99090000d0",
    "_score": null,
    "fields": {
      "tags": null,
 "geoloc: { lat: 34.243161065225, lon: -111.31945564679"}
      "dtmPosted": "2012-06-06 16:12:54",
      "title": "Soaring Sky LLC",
      "username": "user123",
      "postedBy": null,
      "rating": 1,
      "geodistance": 32.4533052120666     ---> computed via 
script_fields.
},
"sort": [
27.45321291360537          --> geo distance sort.
],
"_explanation": {
"value": 1,
"description": "ConstantScore(:), product of:",
"details": [
{
"value": 1,
"description": "boost"
},
{
"value": 1,
"description": "queryNorm"
}
]
}
}
Following are the two important parameters being sent to ElasticSearch.
- *The Geo Distance Script fields parameters
 
 "script_fields": {
   "geodistance": {
     "params": {
       "lat": 42.3788774,
       "lon": -72.032366
     },
     "script": "doc['geoloc'].empty ? null : 
doc['geoloc'].distance(lat, lon)"
}
},
The Sort specification parameters
*
 "sort": {
   "_geo_distance": {
     "field": "gd",
     "order": "asc",
     "unit": "mi",
     "default": "1",
     "geoloc": {
       "lat": 42.3788774,
       "lon": -72.032366
     }
   }
Please let me know what i'm missing.
Regards,
raul
--