json - 将 Elastic Search 字段转换为数组

标签 json elasticsearch

在 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/

相关文章:

elasticsearch - Elasticsearch将自定义分析器添加到所有字段

javascript - 编写一个函数对对象数组进行排序(通过使用另一个对象来指定排序路径和顺序)

javascript - 将数组中的所有数字填充到随机 div 中

javascript - 将 Excel 数据导出到嵌套 JSON

python - Elasticsearch - field_value_factor,缺少参数

image - 为什么docker上的相同Elasticsearch镜像的不同容器退出?

elasticsearch - 筛选器构面返回所有文档的计数,而不是范围

javascript - 显示 json 文件中的数据

php - JSON数组和PHP问题

python - 带有 Elasticsearch 的 django-haystack 不为​​新创建的对象构建索引