Объединить документы со скриптом - PullRequest
0 голосов
/ 17 сентября 2018

Я хочу контролировать, как документы объединяются при использовании /_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, поэтому я не уверен, как разместить документ с новыми значениями и передать сценарий, как объединить документ с существующим, если он существует.

...