Ze *_*eus 1 groovy elasticsearch
我在尝试匹配索引中的所有内容时出现此错误,并显示给定geo_point与查询结果之间的距离,我正在使用DrTech的答案来显示脚本:
这是我的DSL查询:
{
"query": {
"match_all": {}
},
"script_fields": {
"distance": {
"lang": "groovy",
"params": {
"lat": 2.27,
"lon": 50.3
},
"script": "doc['geo_coordinates'].distanceInKm(lat,lon)"
}
}
}
Run Code Online (Sandbox Code Playgroud)
查询响应:
{
"took": 50,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 4,
"failed": 1,
"failures": [
{
"shard": 0,
"index": "users",
"node": "pa76fjdWQl2YAHmgCT4oKw",
"reason": {
"type": "script_exception",
"reason": "failed to run inline script [doc['geo_coordinates'].distanceInKm(lat,lon)] using lang [groovy]",
"caused_by": {
"type": "null_pointer_exception",
"reason": null
}
}
}
]
},
"hits": {
"total": 184,
"max_score": 1,
"hits": []
}
Run Code Online (Sandbox Code Playgroud)
我的映射中有这个:
"geo_coordinates" : {
"type" : "geo_point",
"lat_lon" : true
},
Run Code Online (Sandbox Code Playgroud)
所以我不明白为什么我得到一个空指针!.....
这可能是因为其中一个文件在该geo_coordinates领域没有任何价值.因此,您需要在脚本中考虑这种情况.
试试这个:
{
"query": {
"match_all": {}
},
"script_fields": {
"distance": {
"lang": "groovy",
"params": {
"lat": 2.27,
"lon": 50.3
},
"script": "doc['geo_coordinates'] ? doc['geo_coordinates'].distanceInKm(lat,lon) : 0"
}
}
}
Run Code Online (Sandbox Code Playgroud)