I need to sort based on two logical part in script. For each document, min value ( HQ and offices distance from given distance) is calculated and returned for sorting. Since I need to return only 1 value, I need to combine those scripts that calculate distance between hq and given location as well as multiple offices and given location.
I tried to combine those but Offices is nested property and Headquarter is non-nested property. If I use "NestedPath", somehow I am not able to access Headquarter property. Without "NestedPath", I am not able to use Offices property. here is the mapping:
"offices" : {
"type" : "nested",
"properties" : {
"coordinates" : {
"type" : "geo_point",
"fields" : {
"raw" : {
"type" : "text",
"index" : false
}
},
"ignore_malformed" : true
},
"state" : {
"type" : "text"
}
}
},
"headquarters" : {
"properties" : {
"coordinates" : {
"type" : "geo_point",
"fields" : {
"raw" : {
"type" : "text",
"index" : false
}
},
"ignore_malformed" : true
},
"state" : {
"type" : "text"
}
}
}
And here is the script that I tried :
"sort": [
{
"_script": {
"nested" : {
"path" : "offices"
},
"order": "asc",
"script": {
"lang": "painless",
"params": {
"lat": 28.9672,
"lon": -98.4786
},
"source": "def hqDistance = 1000000;if (!doc['headquarters.coordinates'].empty){hqDistance = doc['headquarters.coordinates'].arcDistance(params.lat, params.lon) * 0.000621371;} def officeDistance= doc['offices.coordinates'].arcDistance(params.lat, params.lon) * 0.000621371; if (hqDistance < officeDistance) { return hqDistance; } return officeDistance;"
},
"type": "Number"
}
}
],
When I run the script, Headquarters logic is not even executed it seems, I get results only based on offices distance.