我有一个elasticsearch文档,它有一个geo_points数组。我将映射创建为:
{
"test": {
"properties": {
"locations": {
"type": "geo_point"
}
}
}
}
现在,我试图创建一个查询,我想在geo_points数组上做一些处理。我创建了这样的查询:
{
"query": {
"filtered": {
"filter": {
"script": {
"script": "sDistance = doc['locations'].values[0].distanceInKm(28.51818,77.096080);"
}
}
}
}
}
我想计算点(28.51818,77.096080)到位置数组中第一个元素的距离。
它给了我这个错误:
GroovyScriptExecutionException[MissingMethodException[没有签名的方法:org.elasticsearch.common.geo.GeoPoint.distanceInKm()适用于参数类型:Double, java.lang.Double) values: [28.51818, 77.09608]]
我尝试使用sDistance = doc['locations'][0].distanceInKm(28.51818,77.096080);
,但它也导致同样的错误。
我在这里做错了什么?
您的脚本不应该自己检索第一个地理点,而只需直接在locations
字段上调用distanceInKm
,如下所示:
{
"query": {
"filtered": {
"filter": {
"script": {
"script": "sDistance = doc['locations'].distanceInKm(28.51818,77.096080);"
}
}
}
}
}
在引擎盖下,将检索第一个geo点并计算其距离