我已阅读ES关于versioning的博文。
但是,我希望能够从更新中获取以前的“_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对象(约翰是总统的那个)。
我实际上喜欢像StackOverflow那样实现版本差异方面。 (顺便说一句,我使用弹性搜索作为我的主要数据库 - 如果有办法与其他nosql数据库一起使用,我很乐意尝试一下。最好是与ES集成良好的。)
答案 0 :(得分:63)
不,你不能使用内置版本控制。所有这一切都是存储当前版本号,以防止您不按顺序应用更新。
如果您想保留多个版本,那么您必须自己实现。根据您可能要存储的版本数量,您可以采用以下三种方法:
适用于小批量更改:
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)相同,但将旧版本存储在单独的索引中,因此保留用于大多数查询的“实时”索引,小而且性能更高。