【发布时间】:2021-06-07 23:35:38
【问题描述】:
我们在弹性搜索索引中有一些遗留字段,这给我们带来了一些麻烦,我们想对整个索引执行字符串替换。
例如,一些旧时间戳以2000-01-01T00:00:00.000+0100 的格式存储,但应存储为2000-01-01T00:00:00.000+01:00。
我尝试运行以下查询:
POST /my_index/_update_by_query
{
"script":
{
"lang": "painless",
"inline": "ctx._source.timestamp = ctx._source.timestamp.replace('+0100', '+01:00')"
}
}
我在 Kibana 中运行查询,但我总是遇到查询超时 - 我想这不一定是坏事,因为数据库很大,但是我从来没有看到更新的字段。
有没有办法查看此类查询的状态?
我也尝试为更新创建搜索查询,但没有成功:
GET /my_index/_search
{
"query": {
"query_string": {
"query": "*0100",
"allow_leading_wildcard": true,
"analyze_wildcard": true,
"fields": ["timestamp"]
}
}
}
不幸的是,它总是返回空集 - 不确定可能出了什么问题。
实现此类更新的正确方法是什么?
【问题讨论】:
-
你应该使用
wait_for_completion=false参数在后台运行任务,见here how -
听起来很有帮助!您还可以检查搜索查询吗?为什么它不会返回任何结果?
-
日期字段不像文本字段那样分析,所以这就是这种查询(即通配符查询)有效的原因
-
顺便说一句,您的映射对于该字段的外观如何?
-
为什么说“破”?如果提取的文档没有错误,则表示该值符合预期的日期格式,即
+0100与+01:00相同,两者都是 GMT+1 时区的有效语法
标签: elasticsearch elasticsearch-painless