Добавить элемент в поле 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"
}
}
}