Эластичный поиск обновляет несколько полей в одном запросе

работает над версией ES 5.x, и вам нужно обновить несколько полей, используя скрипт. Также поделитесь, есть лучшее решение.

POST ../100/_update
    {
    "script" : {
        "inline": "ctx._source.student.hobbies.add(params.tag)",
        "lang": "painless",
        "params" : {
            "tag" : "cricket"
        }
    }
}

также тот же студент, мне нужно обновить номер телефона. теперь я звоню 2 api для обновления хобби и номера телефона. ищу лучшее решение для обновления обоих в одном запросе


person Learn Hadoop    schedule 23.02.2018    source источник
comment
Просто добавьте точку с запятой после первого оператора и добавьте второй оператор ;-)   -  person Val    schedule 23.02.2018
comment
{ "script" : { "inline": "ctx._source.student.hobbies.add(params.tag)", "lang": "painless", "params" : { "tag" : "cricket" } } } ------ { "script" : { "inline": "ctx._source.student.phone.add(params.tag)", "lang": "painless", "params" : { "tag" : "122-33-4567" } } } - куда ставить точку с запятой   -  person Learn Hadoop    schedule 23.02.2018
comment
{ "script" : { "inline": "ctx._source.student.hobbies.add(params.tag)", "lang": "painless", "params" : { "tag" : "cricket" } } }; { "script" : { "inline": "ctx._source.student.phone.add(params.tag)", "lang": "painless", "params" : { "tag" : "122-33-4567" } } } - я пробовал это. Обновились первые скриптовые увлечения. но не номер телефона.   -  person Learn Hadoop    schedule 23.02.2018
comment
Мой ответ ниже   -  person Val    schedule 23.02.2018


Ответы (1)


Просто добавьте точку с запятой между обоими операторами, например:

{
  "script": {
    "inline": "ctx._source.student.hobbies.add(params.hobby); ctx._source.student.phone.add(params.phone)",
    "lang": "painless",
    "params": {
      "hobby": "cricket",
      "phone" : "122-33-4567"
    }
  }
}

Если у вас есть более одного значения для добавления в массив, вы можете сделать это следующим образом

{
  "script": {
    "inline": "ctx._source.student.hobbies.addAll(params.hobbies); ctx._source.student.phone.add(params.phone)",
    "lang": "painless",
    "params": {
      "hobbies": ["football", "cricket"],
      "phone" : "122-33-4567"
    }
  }
}
person Val    schedule 23.02.2018
comment
Но больше увлечений добавить не мог. здесь тип поля хобби - массив .. если добавить крикет, футбол, тогда он будет обрабатываться как одно значение и сохраняться как крикет, футбол, но я исключил крикет, футбол - person Learn Hadoop; 23.02.2018