2

我想更新 ElasticSearch 文档,同时保持文档的版本相同。我正在使用 version_type=external,如index_ 文档的版本控制部分所示如该部分所述,通常会阻止使用另一个相同版本的文档更新文档:“如果提供的值小于或等于存储文档的版本号,则会发生版本冲突并且索引操作将失败。”

我想保持版本不变的原因是,当向该对象添加新标签时,我没有创建对象的新版本(存储在我的数据库中),但我希望新标签显示在我的 ElasticSearch 索引中. 这对 ElasticSearch 可行吗?

我尝试删除该文档,然后添加一个具有相同 ID 和版本的新文档,但这仍然给了我以下异常:

VersionConflictEngineException[[myindex][2] [mytype][6]: 版本冲突,当前1,提供1 ]

仅供参考,我使用的是 PHP Elastica(带有方法$type->deleteDocument($doc);$type->addDocument($doc);),但这个问题通常适用于 ElasticSearch。

4

1 回答 1

2

elasticsearch 保留已删除文档信息的时间由index.gc_deletes参数控制。默认情况下,这个时间是1m. 因此,理论上,您可以将此时间减少到0s,等待一秒钟,删除文档,索引具有相同版本的新文档,然后设置index.gc_deletes1m。但目前由于错误,这只能在 master 上工作。如果您使用的是旧版本的 elasticsearch,您将无法在index.gc_deletes不先关闭索引的情况下进行更改。

elasticsearch.org 网站上有一篇很好的博文,详细描述了 elasticsearch 如何处理版本。

于 2013-07-27T18:30:48.283 回答