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



我读了一篇关于ES版本控制的博文。

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

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

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

我将它更新为:

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

然后,通过ES中的版本控制,我是否能够获得对象的先前job属性?我试过了:

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

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

我实际上想实现一个版本差异方面很像StackOverflow。(顺便说一句,我使用弹性搜索作为我的主要数据库-如果有一种方法可以做到这一点与其他NoSQL数据库,我很乐意尝试一下。最好是与ES很好地集成的。)

不,您不能使用内置的版本控制。所有这一切都是为了存储当前的版本号,以防止您应用更新无序。

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

对于低音量变化:

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)相同,但将旧版本存储在单独的索引中,以便保持您的"活"索引,它将用于您的大多数查询,更小,更高效。

最新更新