我有多个地点:
文件1 -
"联系":[ { "地址":{ " geolocation":{ " lon":-73.5409, " lat":41.2512 } } } ]
文件2 -
{"联系":[ { "地址":{ " geolocation":{ " lon":-73.7055, " lat":40.6744 } } }, { "地址":[ { " geolocation":{ " lon":-73.9325, " lat":40.7482 } }, { " geolocation":{ " lon":-87.9921, " lat":42.9959 } }, { " geolocation":{ " lon":-95.4563, " lat":29.8775 } } ] } ] }
geo_distance按最近的位置查找两个文档。
"geo_distance": {
"distance": "275mi",
"distance_type": "plane",
"contact.address.geolocation": {
"lat": 42,
"lon": -71
},
"unit": "mi"
}
}
但是当我添加脚本字段来输出lat,lon和distance
时"script_fields": {
"distance_value": {
"script": "doc.containsKey('contact.address.geolocation') ? doc['contact.address.geolocation'].value ? doc['contact.address.geolocation'].arcDistanceInMiles(42.2882,-71.0474) : null : null"
},
"geolocation": {
"script": "doc.containsKey('contact.address.geolocation') ? doc['contact.address.geolocation'].value : null"
}
}
从文档2输出随机地理定位元素。 对于文件1,它是147英里 但是对于文档2,它是1601英里,因为它的位置与geo_distance过滤器不同。
如何打印与geo_distance相同的值?我希望显示与我的观点的距离。
我试过这个剧本:
"script_fields": {
"distance_value": {
"script": "if (doc.containsKey('contact.address.geolocation')==false) return null; min = 40000; for(e in doc['contact.address.geolocation']){ c=0; if(e!=null) c = e.arcDistanceInMiles(42.2882,-71.0474); if(c<min) min=c;}; return min;"
}
}
它给出了错误 没有方法签名:org.elasticsearch.common.geo.GeoPoint.arcDistanceInMiles()适用于参数类型:(java.lang.Double,java.lang.Double) 此外,我认为它不会遍历所有的凝胶化领域。
答案 0 :(得分:0)
我发现只有一种方法可以输出与过滤器相同的距离 - 添加&#34;排序&#34;元素:
"sort": [
"_score",
{
"_geo_distance": {
"contact.address.geolocation": [
-71,
42
],
"order": "asc",
"unit": "mi"
}
}
]