在已存在的文档中插入新文档(如果尚未存在)或更新(增加计数器1)的最优雅方式是什么?
这一个:
res = elasticsearch.update(
index='stories-test',
doc_type='news',
id=1,
body={
"doc":
{
"author": "me",
"visits": 1
},
'doc_as_upsert': True
},
script={
"inline": "ctx._source.visits += visit",
"params": {
"visit": 1
}
}
)
遇到以下错误:
RequestError: TransportError(400, u'action_request_validation_exception', u"Validation Failed: 1: can't provide both script and doc;")
答案 0 :(得分:1)
您可以在正文中加入"doc"
字段进行更新。
es = Elasticsearch()
doc = NewsSerializer(news).data
es.update(index="news_index", doc_type='news', id=1, body={"doc": doc})
答案 1 :(得分:0)
您无法在doc和script params中使用更新查询。您可以使用其中的script
字段在params
字段中执行所有操作。
您可以在这篇文章中找到更多信息: