versioning に関する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とうまく統合できるものです。)
いいえ、組み込みのバージョン管理を使用してこれを行うことはできません。必要なのは、現在のバージョン番号を保存して、アップデートを順不同で適用しないようにすることです。
複数のバージョンを利用できるようにしたい場合は、自分で実装する必要があります。保存する可能性のあるバージョンの数に応じて、次の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!' }},
]
}
大量の変更の場合:
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)と同じですが、古いバージョンを別のインデックスに保存するため、クエリの大部分で使用される「ライブ」インデックスを維持し、小規模でパフォーマンスが向上します。