此代码按预期工作。但我没有将第三个国家添加为另一个文档,而是想更新第一个文档。
DELETE /test_index
PUT /test_index
PUT /test_index/doc/1
{
"parent": [
{
"name": "India",
"label": "IN"
},
{
"name": "China",
"label": "CN"
}
]
}
PUT /test_index/doc/2
{
"parent": [
{
"name": "Pakistan",
"label": "PK"
}
]
}
因此,文件ID 1将有3个国家印度,中国和巴基斯坦。我想我需要使用doc_as_upsert参数更新API。但我不确定如何编写JSON。
答案 0 :(得分:1)
您可以使用update API:
更新脚本curl -XPOST 'localhost:9200/test_index/doc/1/_update' -d '{
"script" : {
"inline": "ctx._source.parent += ['name': name, 'label': label]",
"params" : {
"name" : "Pakistan",
"label": "PK"
}
}
}'
<强>更新强>
如果要在批量查询中使用它,也可以
curl -XPOST 'localhost:9200/test_index/doc/_bulk' -d '
{ "update" : { "_id" : "1"} }
{ "script" : { "inline": "ctx._source.parent += ['name': name, 'label': label]", "lang" : "groovy", "params" : {"name" : "Pakistan", "label": "PK"}}}
'
答案 1 :(得分:0)
添加到val的答案,如果文档尚不存在,我可以使用upsert。
POST /test_index/doc/1/_update
{
"script": {
"inline": "ctx._source.parent += ['name': name, 'label': label]",
"params": {
"name": "Pakistan",
"label": "PK"
}
},
"upsert": {"parent" : [{
"name": "Pakistan",
"label": "PK"
}]
}
}
<强>更新强>
使用upsert的批量API看起来像这样......
POST /test_index/doc/_bulk
{ "update" : { "_id" : "1"} }
{ "script" : { "inline": "ctx._source.parent += ['name': name, 'label': label]", "lang" : "groovy", "params" : {"name" : "Pakistan", "label": "PK"}}, "upsert": {"parent" : [{"name": "Pakistan", "label": "PK" }] }}