2

如果类型不匹配,是否可以将一些元素附加到弹性搜索字段?如果我有这样的文件:

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

我想像这样附加另一个标签字段fe“blue”:

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

用于将另一个元素附加到列表中。那么有什么方法可以将另一个元素附加到字符串字段?谢谢你的任何建议。

4

1 回答 1

7

您可以做的是为您的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"
     }
   }
}
于 2018-01-09T15:22:42.347 回答