我们可以使用弹性search版本检索以前的_source文档吗?

我已经阅读了关于版本控制的 ES上的博客文章。

但是,我希望能够从更新中获得以前的“_souce”文档。

例如,假设我有这个对象:

{ "name": "John", "age": 32, "job": "janitorial technician" } // this becomes version 1 

我更新到:

 { "name": "John", "age": 32, "job": "president" } // this becomes version 2 

然后,通过ES中的版本控制,我能否获得对象的前一个“工作”属性? 我试过这个:

 curl -XGET "localhost:9200/index/type/id?version=1" 

但是这只是返回最新的_source对象(John是总裁)。

我实际上喜欢像StackOverflow那样实现版本差异方面。 (顺便说一句,我使用弹性search作为我的主分贝 – 如果有一种方法可以与其他nosql数据库做到这一点,我很乐意尝试它,最好是一个与ES完美集成的方法。

不,你不能使用内build版本来做到这一点。 所做的只是存储当前版本号,以防止您按顺序应用更新。

如果你想保留多个版本,那么你必须自己实现。 根据您可能要存储的版本数量,可以采取三种方法:

对于较小的音量变化

1)将旧版本存储在同一文档中

 { text: "foo bar", date: "2011-11-01", previous: [ { date: '2011-10-01', content: { text: 'Foo Bar' }}, { date: '2011-09-01', content: { text: 'Foo-bar!' }}, ] } 

对于大批量更改

2)添加一个current标志:

 { doc_id: 123, version: 3, text: "foo bar", date: "2011-11-01", current: true } { doc_id: 123, version: 2, text: "Foo Bar", date: "2011-10-01", current: false } 

3)与上面的(2)相同,但将旧版本存储在单独的索引中,因此保留用于大多数查询的“实时”索引,并且小型且性能更高。