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