弾性検索に商品を保管したい 各商品にはいくつかのフィールド(説明、数量、価格、名前)があります。しかし、毎日価格と数量が変わる可能性があります。エラスティック検索履歴の文書化
これを弾性検索にどのように保存して、すべての過去の価格の商品を検索することができますか?
現在のバリューフィールドのドキュメントと、プロダクトドキュメントを親として持つ別のドキュメントを用意する必要があります。日付と変更された値を配列に追加する日常的な作業がありますか?
弾性検索に商品を保管したい 各商品にはいくつかのフィールド(説明、数量、価格、名前)があります。しかし、毎日価格と数量が変わる可能性があります。エラスティック検索履歴の文書化
これを弾性検索にどのように保存して、すべての過去の価格の商品を検索することができますか?
現在のバリューフィールドのドキュメントと、プロダクトドキュメントを親として持つ別のドキュメントを用意する必要があります。日付と変更された値を配列に追加する日常的な作業がありますか?
残念ながら、ElasticSearchのバージョニングに対処する方法はありません。 built-in versioningは、以前のバージョンの取得用に設計されていません。アプリケーション層でバージョン管理を制御する必要があります。配列の外側のバージョン管理外の性質を有する
があるため便利です
{
"unversioned_prop1": "prop1",
"unversioned_prop2": "prop2",
...
"versions": [
{
"version": "version_x",
"version_metadata": { ... }
"document": {
"versioned_prop3": "prop3",
"versioned_prop4": "prop4"
...
}
},
{ "version": "version_y", "document": { ... versioned props ... } },
...
]
"current": { ... current versioned props ... }
}
バージョン管理外のプロパティ:私たちが最終的に行うために選出しました。このような文書のストアであるすべての古いコピー
ドキュメントのすべてのバージョンの一部のプロパティを更新することができます。さらに、検索ウェイトが予測可能に動作するようにします。
アプリケーションレイヤで情報の一部を一緒にシームレスに処理する必要があるという欠点があります。別のプロパティに現在のバージョンを断ち切る現在のバージョン
は、あなただけの文書の最新バージョンを返すようにsearch filteringを使用することができます。
バージョンのメタデータ
これは、日付など、上の検索したい場合があります任意のバージョン情報が含まれています。あなただけで簡単にサブプロパティのことができますのようなバージョン管理プロパティを検索することができます
検索
。したがって、検索は次のようになります。
...
{
"match": {"versions.document.versioned_prop": "query string"
}
これは、すべてのバージョンのドキュメントを検索し、一致するものがあれば結合したドキュメントを返します。
アップデート
我々は新しいバージョンを作成する必要がある場合は、新しい文書を挿入し、現在のドキュメントを更新するためにpartial updateを使用することができます。
代替
このアプローチの主要な欠点は、あなたが簡単バージョンの内部のものに基づいて検索結果の一部を絞り込むことができないということです - あなたはおそらく、アプリケーション側でそれらをフィルタリングすることになるでしょう。
ドキュメントを個別に動作させる必要がある場合は、ドキュメントを個別にインデックスする必要があります。そのためには、すべてのバージョンに「コレクションID」を含めることができます。コレクションIDはドキュメント固有のもので、すべてのバージョンで共有されます。
コレクションIDのアプローチでは問題が多すぎるため、上記のアプローチに移行し、より高いレベルの成功を収めました。サイドノートとして
、私はあなたの重要なレコードのプライマリストレージとしてElasticSearchを使用personally wouldn't recommend。ときどきデータが失われた場合にのみ実行してください。
まず、既存のドキュメントを新しい数量/価格で更新しないでください。
数量/価格の変更がある場合は、新しい文書を挿入してください。重複するフィールドがありますが、文書内の特定の日付にその製品に関するすべての情報を表示することができます。
また、その製品のすべてのドキュメントを取得することができます。独自の値(価格)があります。このモデリングではデータは複製されますが、これは問題としては表示されません。