两年前有人问how to do upserts when you don't know a document's id。 (未接受的)答案引用了feature request
这导致了_update_by_query
API。
但是如果没有匹配,_id
不允许插入,所以它不是真正的upsert,而只是另一种更新方式。
有没有办法在没有{{1}}的情况下进行upsert?我知道我的查询将始终返回一个或零结果。或者我被迫做多个请求(并保持自己的独特性)?
答案 0 :(得分:0)
现在似乎不可能。 _update
提供了upsert
属性,但遗憾的是,这不适用于_update_by_query
。以下内容仅为您提供Unknown key for a START_OBJECT in [upsert].
POST website/doc/_update_by_query?conflicts=proceed
{
"query": {
"term": {
"url": "http://foo.com"
}
},
"script": {
"inline": "ctx._source.views+=1",
"lang": "painless"
},
"upsert": {
"views": 1,
"url": "http://foo.com"
}
}
答案 1 :(得分:0)
现在无需知道所有文档中的 in_stock
值,您可以将其计数减少 1:
POST products/_update_by_query
{
"script": {
"source": "ctx._source.in_stock--"
},
"query": {
"match_all": {}
}
}