当前位置: 首页 > 面试题库 >

我们可以使用elasticsearch版本检索以前的_source文档吗

郗福
2023-03-14
问题内容

我已经阅读了有关ES的关于版本管理的博客文章。

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

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

{
    "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一样。(顺便说一句,我正在使用elasticsearch作为我的主要数据库-
如果有一种方法可以与其他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)相同,但是将旧版本存储在单独的索引中,因此保留您的“实时”索引,该索引将用于大多数查询(较小且性能更高)。



 类似资料:
  • 是否有一种方法可以使我在从索引中检索时,只获得文档的_source中的数据&而不是任何其他元数据,如_index、_type、_id和_score?

  • 我想开发一个部署目标为iOS 6.0的应用程序。如果我只使用Swift,它会工作吗?还是我也需要编写Objective-C代码?

  • 我们可以在从 BLOB 存储下载文件时在微软办公文档中添加水印文本吗? 我的分析正在使用 AIP - Azure 信息保护进行。

  • 我正在寻找vaadin版本6文档。在vaadin主页上,我只能找到vaadin版本7的文档。 我在哪里可以找到: 瓦丁之书第六版 可用时:-采样器的源代码/war?

  • 我已经实现了一个基于lucene的软件来索引超过1000万的人名,这些人名可以用不同的方式书写,比如“Luíz”和“Luis”。索引是使用各个标记的语音值创建的(创建了一个自定义分析器)。 目前,我正在使用QueryParser查询一个给定的名称,结果很好。但是,在《Lucene in Action》一书中提到,SpanarQuery可以使用标记的接近性来改进我的查询。我对名称的非拼音索引使用了S

  • 我们正在AWS上运行elasticsearch,目前支持elasticsearch 6.3作为最新版本。 我们有一个业务案例,需要每天更新索引中的所有文档并删除一个嵌套对象。elasticsearch通过查询API进行了更新,这将解决我们的问题。 但在我们的java应用程序中,我们使用的是java高级rest客户端。rest客户端版本6.5支持按查询更新api。现在,如果我们将rest客户端升级到