此代码正在按预期工作。但是,我不想把第三国作为另一份文件,而是要更新第一份文件。
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。
发布于 2016-07-28 04:49:08
可以使用更新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"}}}
'发布于 2016-07-28 06:36:46
在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" }] }}https://stackoverflow.com/questions/38627213
复制相似问题