我想控制使用/_update
API时文档的合并方式。如果文档不存在,我想创建它(如果存在),我想在某些条件下合并它的一部分。
示例:
POST master_alias/test/123/_update
{
"doc": {
"id": 123,
"name": "test case",
"tests": [
{
"id": 1,
"name": "Test A"
},
{
"id": 2,
"name": "Test B"
}
]
},
"doc_as_upsert": true
}
上述调用将创建一个文档,如下所示:
{
"_index": "222681839523561",
"_type": "test",
"_id": "123",
"_version": 1,
"found": true,
"_source": {
"id": 123,
"name": "test case",
"tests": [
{
"id": 1,
"name": "Test A"
},
{
"id": 2,
"name": "Test B"
}
]
}
}
现在,我下次要运行类似的内容:
POST master_alias/test/123/_update
{
"doc": {
"id": 123,
"name": "test case",
"tests": [
{
"id": 3,
"name": "Test C"
}
]
},
"doc_as_upsert": true,
"script": {
"lang": "painless",
"inline": """
ctx._source.tests += doc['tests']
]
"""
}
}
我想得出以下结果:
{
"_index": "222681839523561",
"_type": "test",
"_id": "123",
"_version": 2,
"found": true,
"_source": {
"id": 123,
"name": "test case",
"tests": [
{
"id": 1,
"name": "Test A"
},
{
"id": 2,
"name": "Test B"
},
{
"id": 3,
"name": "Test C"
}
]
}
}
但是,我还想添加其他控件。我有可能和Kibana一起玩但没有成功。我只能发布script
或doc
,所以我不确定如何使用新值发布文档,以及如何传递脚本(如果存在的话)将文档与现有文档合并。