57

バージョニングに関する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と同じように、バージョンの違いの側面を実際に実装したいと思います。(ところで、私はメインデータベースとしてelastic-searchを使用しています-他のnosqlデータベースでこれを行う方法があれば、試してみてください。できれば、ESとうまく統合できるものです。)

4

1 に答える 1

77

いいえ、組み込みのバージョン管理を使用してこれを行うことはできません。更新を順不同で適用しないように、現在のバージョン番号を保存するだけです。

複数のバージョンを利用できるようにしておきたい場合は、それを自分で実装する必要があります。保存する可能性のあるバージョンの数に応じて、次の3つのアプローチをとることができます。

少量の変更の場合

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!' }},
  ]
}

大量の変更の場合

current2)フラグを追加します:

{
   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)と同じですが、古いバージョンを別のインデックスに保存するため、クエリの大部分に使用される「ライブ」インデックスを維持し、小さくてパフォーマンスを向上させます。

于 2011-11-22T12:18:28.510 に答える