我在我的一个项目中使用elasticsearch。我在更新记录时遇到问题。我得到的错误信息是: -
{ _index: 'makes',
_type: 'make',
_id: '55b8cdbae36236490d00002a',
status: 409,
error: 'VersionConflictEngineException[[makes][0] [make][55b8cdbae36236490d00002a]: version conflict, current [168], provided [167]]' }
使用ES bulk api。我的应用程序在node.js。
让我分享我的代码: -
var conditions = [];
conditions.push({
update: {
_index: config.elasticSearch.index,
_type: config.elasticSearch.type,
_id: id
}
});
conditions.push({
doc: {
published: true
}
});
client.bulk({
body: conditions
}, function(err, resp) {
console.log(resp);
console.log(resp.items[0].update);
return res.send({success: true, message: "Shows updated successful"})
});
以下是条件数组的值:
[ { update:
{ _index: 'makes',
_type: 'make',
_id: '55b8cdbae36236490d00002a' } },
{ doc: { published: true } } ]
答案 0 :(得分:2)
当您开始查询记录时,其对记录的响应包括该记录的版本。当您想要更新它时,但在它之前,它已被另一个更新,数据库中的记录具有比客户端认为的更高的版本。 这可能是因为某些操作仍处于队列中,因此您将获得未处理的记录(因此版本较低)。发生这种情况时,请尝试https://www.elastic.co/guide/en/elasticsearch/reference/1.6/indices-refresh.html:
curl -XPOST 'http://localhost:9200/{your_index}/_refresh'
然后再次调用您的方法