Я хочу контролировать, как документы объединяются при использовании /_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"
}
]
}
}
Однако я также хотел бы добавить дополнительные элементы управления. Возможно ли, что я играл с Кибаной безуспешно. Я могу опубликовать только script
или doc
, поэтому я не уверен, как разместить документ с новыми значениями и передать сценарий, как объединить документ с существующим, если он существует.