elasticsearch - 尝试更新 elasticsearch 中的嵌套 geoip 位置字段
问题描述
这是我尝试过的:
POST orders/_update_by_query
{
"script" : "ctx._source.geoip += newElement",
"params": {
"newElement": {
"location" : "[40.730610, -73.935242]"
}
},
"query": {
"term": {
"CITY": {
"value": "nyc"
}
}
}
}
以上为 [params] 中的 START_OBJECT 抛出错误Unknown key。
第二次尝试:
POST orders/_update_by_query
{
"script":{
"source":
"for (item in ctx._source.geoip){item.location = '[40.730610, -73.935242]'}",
"lang":"painless"
},
"query": {
"term": {
"CITY": {
"value": "nyc"
}
}
}
}
上面抛出空指针异常,指向source.geoip处的句点
我还尝试将 location 的值更改为仅测试但收到相同的错误。
这是我的映射:
{
"orders" : {
"mappings" : {
"properties" : {
"geoip" : {
"dynamic" : "true",
"properties" : {
"location" : {
"type" : "geo_point"
}
}
}
}
}
我正在使用 ES v7.2 和 Kibana v7.2
解决方案
第一种方法中的几个问题:
params
需要在脚本对象中定义,而不是在它下面newElement
需要使用params.newElement
- 你不能附加
+= params.newElement
到一个不存在的ctx._source.geoip
- 您不能将对象附加到单值字段 - 您可以分配它
location
是geo_point
类型,所以是[40.730610, -73.935242]
([lon, lat]
) 或"-73.935242,40.730610"
("lat,lon"
),但不是两者的混合
工作命令:
POST orders/_update_by_query
{
"script": {
"inline": "ctx._source.geoip = params.newElement",
"params": {
"newElement": {
"location": [
40.73061,
-73.935242
]
}
}
},
"query": {
"term": {
"CITY": {
"value": "nyc"
}
}
}
}
推荐阅读
- c# - 如何检测是否安装了 Powershell Core 以及 C# 中的哪个版本?
- amazon-web-services - NoSuchKey:指定的密钥不存在 AWS S3 Codebuild
- python - 为什么程序没有从字符串中找到任何电子邮件?
- c# - 如何禁用模型验证以允许流畅的验证检查
- php - 将列的格式更改为日期时间 MySql
- logging - ELK Stack 的 Grok 条件解析
- python - discord.py - 即使没有错误消息,机器人也没有响应
- javascript - 在 blazor 项目中使用 javascript 加载特定页面时更改元素的颜色
- encoding - 关于 ASCII 的困惑
- ruby-on-rails - 将 ruby 版本从 1.9.3 升级到 2.0.0 时 rspec 失败