Как создать словарный объект и добавить к нему данные в безболезненном упругом поиске - PullRequest
0 голосов
/ 15 мая 2019

Я хочу написать безболезненный скрипт, который должен возвращать словарь. В основном, если я связываю это с Java, я хочу вывод Dictionary .

Итак, мне нужно объявить карту и список безболезненно. Также мне нужно добавить к нему данные (например, map.add ())

Могу ли я привести пример, как бы вы объявили карту и добавили к ней данные?

Примеры в [безболезненно] (https://www.elastic.co/guide/en/elasticsearch/painless/6.7/painless-examples.html) не охватывают это.

Я использую v6.7

1 Ответ

0 голосов
/ 15 мая 2019

Вы можете сделать это просто так:

Создать документ с пустым словарем

PUT index/1
{
  "dict": {}
}

Обновить документ, чтобы заполнить словарь параметром

POST index/_update/1
{
    "script" : {
        "source": "ctx._source.dict.putAll(params)",
        "lang": "painless",
        "params" : {
            "key1": ["val1", "val2", "val3"],
            "key2": ["val4", "val5"]
        }
    }
}

Вы также можете индексировать документ с нуля, используя скрипт (с scripted_upsert)

POST index/_update/1
{
    "scripted_upsert":true,
    "script" : {
        "source": """
          ctx._source.dict = [:];
          ctx._source.dict['key1'] = params.key1;
          ctx._source.dict['key2'] = params.key2;
        """,
        "params" : {
            "key1" : ["val1", "val2", "val3"],
            "key2" : ["val1", "val2", "val3"]
        }
    },
    "upsert" : {}
}

В обоих случаях вы получите такой документ:

GET / index / 1

{
  "dict": {
      "key1" : ["val1", "val2", "val3"],
      "key2" : ["val1", "val2", "val3"]
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...