插入新文档(如果不存在)或更新(将计数器增加 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;")
您可以在
正文中包含要更新"doc"
字段。
es = Elasticsearch()
doc = NewsSerializer(news).data
es.update(index="news_index", doc_type='news', id=1, body={"doc": doc})
不能同时将更新查询与文档和脚本参数一起使用。您可以使用script
字段中的params
字段执行所有操作。
您可以在这篇文章中找到更多信息:
弹性搜索部分更新