ElasticSearch
附带版本控制https://www.elastic.co/blog/versioning
也许我在这里误解了版本控制的含义。
我想查找版本1中的所有文档,以便我可以更新它们。
一种显而易见的方法是逐个浏览所有文档并选择版本1中的文档。
问题:
是否可以使用ONE
查询检索版本1中的所有文档?
答案 0 :(得分:2)
由于Elasticsearch的分布式特性,它需要一种方法来确保以正确的顺序应用更改。这就是 _version 发挥作用的地方。这是确保文档的旧版本永远不会覆盖新版本的内部方式。
您还可以使用 _version 作为确保您要删除/更新的文档在此期间未被修改的方法 - 这可以通过指定版本号来完成网址;例如,只有当索引中存储的文档的当前 _version 为5时,PUT /website/blog/1?version=5
才会成功。
您可以在此处详细了解:Optimistic Concurrency Control
要回答你的问题,
是否可以使用ONE查询检索版本1中的所有文档?
否强>
答案 1 :(得分:0)
您可以使用脚本化的_reindex
到一个空的临时索引中。然后,目标索引将仅包含具有_version=1
的那些文档。
您还可以添加更多查询节,以限制原始输入(使用反向索引,速度更快),以及其他更轻松的条件(每个文档,更灵活)。
# ES5, use "source" i/o "inline" for later ES versions.
http POST :9200/_reindex <<END
{
"conflicts": "proceed",
"source": {
"index": "your-source-index"
},
"dest": {
"index": "some-temp-index",
"version_type": "external"
},
"script": {
"lang": "painless",
"inline": "if(ctx._version!=1){ctx.op='delete'}"
}
}
END