0

助けが必要でした。私のドキュメントにはバージョンフィールドがあります。更新されたドキュメントのみが、バージョン番号が増加した新しいレコードを持ちます。

例:

{id:1 , version:1,…} 
{id:1 , version:2,….} //This has been updated
{id:2 , version:1,…} 

上記の例では、id = 1は更新されているため、2つのレコードがあります。id = 2は更新されておらず、バージョン1のままであるため、単一のレコードがあります。

現在、Elastic Searchには、最大バージョンを取得できるクエリがあります。例:バージョン1で結果が得られるまで、一意のドキュメントを取得します。

{id:1 , version:1,…}
{id:2 , version:1,…}

バージョン2が提供するまで、固有のドキュメントを取得します。

{id:1 , version:2,….}
{id:2 , version:1,…}

(上記の結果では、バージョン1とバージョン2が混在しています)

ありがとう、カラン

4

1 に答える 1

1

Elasticsearchでこれを実現する簡単な方法はありません(少なくともField Collapsing / Combineingのようなものが実装されるまで)。2つのインデックスを維持することをお勧めします。1つは自動生成されたIDを持つすべてのバージョン用で、もう1つはレコードのidフィールドをIDとして持つ最新バージョンのみを持つインデックスです。すべてのバージョンが必要な場合は最初のインデックスを検索でき、最新バージョンのみが必要な場合は2番目のインデックスを検索できます。

別の解決策は、レコードが最新バージョンを表すことを何らかの方法で示すことです。これは、ブールフィールド「latest」を追加することで実行できます。つまり、新しいレコードが追加されたときに、以前の最新バージョンでレコードのインデックスを再作成するか、すべてのレコードの最新バージョンを追跡する子ドキュメントを追加できます。 。

于 2012-12-10T11:43:25.497 に答える