elasticsearch - 遍历数组 update_by_query
问题描述
我在特定索引中的所有 Elasticsearch 文档的源中都有一个名为“标签”的数组。我正在尝试使用 update_by_query 无痛脚本小写标记数组中的所有值。
这似乎是一个简单的操作,这是我尝试过的:
POST my_index/_update_by_query
{
"script": {
"source": """
for (int i = 0; i < ctx._source['tags'].length; ++i) {
ctx._source['tags'][i].value = ctx._source['tags'][i].value.toLowerCase()
}
""",
"lang": "painless"
},
"query": {
"match_all": {}
}
}
执行上述代码时出现空指针异常。我想我的语法可能略有偏差。让这个工作有很多麻烦,并希望得到任何帮助。
解决方案
我解决了这个问题......有多个小的语法错误,但我需要添加一个存在检查:
POST my_index/_update_by_query
{
"script": {
"source": """
if (ctx._source.containsKey('tags')) {
for (int i = 0; i < ctx._source['tags'].length; ++i) {
ctx._source['tags'][i] = ctx._source['tags'][i].toLowerCase()
}
}
""",
"lang": "painless"
},
"query": {
"match_all": {}
}
}
推荐阅读
- html - 文本框对齐旁边的图像
- python - QFileSystemModel QTableView 日期修改高亮
- android - 如何在 ClickableSpan 中使用 inflater.inflate()
- javascript - JS 优化 - 不断设置快速触发事件的变量
- makefile - 用于 esp32 和 esp8266 的 micropython 中的奇数 python 驱动程序文件导致错误
- javascript - Vue-Js 中的多个观察者
- laravel - Laravel 图像干预调整大小并入库
- c# - “按钮”控件未显示在 .NET Core 项目的工具箱中
- c# - 如果记录找到匹配,则比较两个数据集并更新行
- android - Android TileService onStartListening 没有立即调用?