我的索引已经填满了很多文件
索引中的所有文档都有一个name
字符串字段
我想查询并更新所有name = A
并将其设置为name = B
的内容。
为清楚起见,在SQL中它会是这样的:
UPDATE FROM table SET name = 'B' WHERE name = 'A';
使用elasticsearch API,根据文档: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html
我尝试了这个查询:
POST my_index/_update_by_query
{
"script": {
"inline": "ctx._source.name = 'B'",
"lang": "painless"
},
"query": {
"term": {
"name" : "A"
}
}
}
然而它只是返回没有被修改的东西。我仍然可以找到名称为A的文档,因此它们未被编辑。
{
"took": 1,
"timed_out": false,
"total": 0,
"updated": 0,
"deleted": 0,
"batches": 0,
"version_conflicts": 0,
"noops": 0,
"retries": {
"bulk": 0,
"search": 0
},
"throttled_millis": 0,
"requests_per_second": -1,
"throttled_until_millis": 0,
"failures": []
}
知道为什么我的_update_by_query没有做任何事情吗?
答案 0 :(得分:2)
找到它,我的字符串字段是一个分析字段,所以我必须使用这样的匹配查询:
POST my_index/_update_by_query
{
"script": {
"inline": "ctx._source.name = 'B'",
"lang": "painless"
},
"query": {
"match": {
"name" : "A"
}
}
}