附加元素Eslasticsearch场(Append element to Eslasticsear

2019-10-31 06:17发布

请为可以附加一些元素elasticsearch场,如果类型不匹配? 如果我有这样的文件:

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

我想追加另一标签字段FE“蓝色”是这样的:

{
"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)"

对于追加一个新元素,列出。 那么,有没有办法如何追加一个新元素,串场? 谢谢你的任何建议。

Answer 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"
     }
   }
}


文章来源: Append element to Eslasticsearch field