给出VersionConflictEngineException消息的{Elasticsearch _bulk更新问题

时间:2015-07-30 06:11:57

标签: node.js elasticsearch-plugin elasticsearch

我在我的一个项目中使用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 } } ]

1 个答案:

答案 0 :(得分:2)

当您开始查询记录时,其对记录的响应包括该记录的版本。当您想要更新它时,但在它之前,它已被另一个更新,数据库中的记录具有比客户端认为的更高的版本。 这可能是因为某些操作仍处于队列中,因此您将获得未处理的记录(因此版本较低)。发生这种情况时,请尝试https://www.elastic.co/guide/en/elasticsearch/reference/1.6/indices-refresh.html

curl -XPOST 'http://localhost:9200/{your_index}/_refresh'

然后再次调用您的方法