Elasticsearch计算两点经纬度距离时出现lang字段解析异常如何解决
问题原因
- 脚本字段结构不符合ES规范:
script_fields下自定义字段(你的distance)的直接子属性只能是script,lang、params、脚本内容均需嵌套在script内部,你当前直接把lang放在distance下,ES无法识别该参数,这也是你收到对应报错的直接原因。 - 脚本内容字段名错误:Elasticsearch 7.x及以上版本中,painless脚本的内容字段名为
source,而非script。 - 嵌套数组字段访问语法错误:ES的doc值访问不支持
[0]这类数组下标写法,数组类型的嵌套字段会被扁平化存储,直接写字段路径即可。
修正后的代码
await this.esService.search({ index: IndexName, body: { sort: [{ avg_rating: { order: "desc" } }], "script_fields" : { "distance" : { "script": { "lang": "painless", "params" : { "lat" : 47.1, "lon" : 8.1 }, "source" : "doc['user.userAddresses.location'].distanceInKm(params.lat,params.lon)" } } }, from: offset, size: take, query: finalQuery } })
内容的提问来源于stack exchange,提问作者user13963926
相关产品推荐
相关产品推荐

