Добавить элемент в поле Eslasticsearch

Пожалуйста, можно добавить какой-либо элемент в поле asticsearch, если типы не совпадают? Если у меня есть такой документ:

{
"counter" : 1,
"tags" : "red"
}

и я хочу добавить другое поле тега, например, "синий":

{
"script" : {
    "source": "ctx._source.counter += params.newTag",
    "lang": "painless",
    "params" : {
        "newTag" : "blue"
    }
}
}

и я хочу, чтобы результат был похож на:

{
"counter" : 1,
"tags" : ["red", "blue"]
 }

я знаю это:

"source": "ctx._source.counter += params.newTag"

используется для добавления строки в другую строку

и это:

"source": "ctx._source.counter.add(params.newTag)"

для добавления другого элемента в список. Так есть ли способ, как добавить другой элемент в строковое поле? Спасибо за любые предложения.

1 ответ

Решение

Что вы можете сделать, это добавить тест для типа вашего tags поле и преобразовать его в массив, если это не так. Этот скрипт должен помочь.

{
   "script" : {
     "source": "if (!(ctx._source.tags instanceof List}) {ctx._source.tags = [ctx._source.tags]} ctx._source.tags += params.newTag",
     "lang": "painless",
     "params" : {
        "newTag" : "blue"
     }
   }
}
Другие вопросы по тегам