尝试在 elasticsearch 中更新嵌套的 geoip 位置字段
Trying to update a nested geoip location field in elasticsearch
这是我试过的方法:
POST orders/_update_by_query
{
"script" : "ctx._source.geoip += newElement",
"params": {
"newElement": {
"location" : "[40.730610, -73.935242]"
}
},
"query": {
"term": {
"CITY": {
"value": "nyc"
}
}
}
}
以上抛出错误 Unknown key for a START_OBJECT in [params].
第二次尝试:
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 的值更改为 test 但收到相同的错误。
这是我的映射:
{
"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"
}
}
}
}
这是我试过的方法:
POST orders/_update_by_query
{
"script" : "ctx._source.geoip += newElement",
"params": {
"newElement": {
"location" : "[40.730610, -73.935242]"
}
},
"query": {
"term": {
"CITY": {
"value": "nyc"
}
}
}
}
以上抛出错误 Unknown key for a START_OBJECT in [params].
第二次尝试:
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 的值更改为 test 但收到相同的错误。
这是我的映射:
{
"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"
}
}
}
}