在 Elasticsearch 中,如果您的文档具有预先存在的数组
"movies": [
"Back to the Future"
]
然后你更新它以添加更多类似的电影
{
"script" : "ctx._source.movies += tag",
"params" : {
"tag" : "Pulp Fiction"
}
}
然后该值将添加到该字段中。这很好用......但是如果该字段一开始不是一个数组而是看起来像这样
“电影”:“回到 future ”
如果运行相同的脚本,您将得到以下结果
“电影”:“回到 future 低俗小说”
所以我的问题是如何获取这个现有字段并将其“转换”为数组以告诉 Elasticsearch 我想将其视为数组?
最佳答案
您可以改用此脚本。它检查 movies
是否是一个数组,如果不是,则创建一个
{
"script" : "if (ctx._source.movies.getClass().isArray()) { ctx._source.movies += tag } else { ctx._source.movies = [ctx._source.movies, tag] }",
"params" : {
"tag" : "Pulp Fiction"
}
}
另一种更简短的方法是始终分配一个数组,然后使用 Groovy 的 Collection.flatten()
将其“展平”。方法
{
"script" : "ctx._source.movies = [ctx._source.movies, tag].flatten()",
"params" : {
"tag" : "Pulp Fiction"
}
}
关于json - 将 Elastic Search 字段转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33303836/