将元素附加到 Elasticsearch 字段
Append element to Eslasticsearch field
如果类型不匹配,是否可以将一些元素附加到 elasticsearch 字段?如果我有这样的文件:
{
"counter" : 1,
"tags" : "red"
}
我想像这样附加另一个标签字段 f.e "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)"
用于将另一个元素附加到列表中。那么有什么办法可以将另一个元素附加到字符串字段吗?谢谢你的任何建议。
您可以做的是为 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"
}
}
}
如果类型不匹配,是否可以将一些元素附加到 elasticsearch 字段?如果我有这样的文件:
{
"counter" : 1,
"tags" : "red"
}
我想像这样附加另一个标签字段 f.e "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)"
用于将另一个元素附加到列表中。那么有什么办法可以将另一个元素附加到字符串字段吗?谢谢你的任何建议。
您可以做的是为 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"
}
}
}