2016-09-07 5 views
0

2つのインデックス間に自動インクリメント整数フィールドが必要です。弾性検索:2つのインデックス間で自動増分整数フィールド

Can Elasticsearchは自動的にテーブルのMySQL「自動インクリメント」フィールドを好きですか?

例:二つの異なるインデックスにいくつかのドキュメントを置くとき:

POST /my_index_1/blogpost/ 
{ 
    "title": "Foo Bar" 
} 

POST /my_index_2/blogpost/ 
{ 
    "title": "Baz quux" 
} 

では、それを取得し、私がしたい:

GET /my_index_*/blogpost/ 
{ 
    "uid" : 1, 
    "title": "Foo Bar" 
}, 
{ 
    "uid" : 2, 
    "title": "Baz quux" 
} 
+1

[elasticsearchの自動インクリメントIDを取得する方法]の複製が可能です(http://stackoverflow.com/questions/22471459/how-to-get-auto-increment-id-for-elasticsearch) – ruhungry

+0

なぜあなたは欲しいですか?自動生成された '_id'フィールドを使用します。ユニークでもあります。 @ ar099968 – hkulekci

+0

@hkulekci古いプロジェクトを移行しているので、古いクライアントをサポートする必要があります。 – ar099968

答えて

3

それは分散システムであるため、いいえ、ESは、任意の自動インクリメント機能を持っていない、考え出しますカウンタの正しい値は自明ではありません。特に(バルク)索引付けは非常に並行する傾向があるためです。十分な文書をスローすると、すべてのノードでCPUを最大限に活用できます。

したがって、ドキュメントをESに送信する前に、このオプションをESの外部で行うことをお勧めします。それ以上は、これをしないでください。何らかの種類の挿入が必要な場合は、単にタイムスタンプを使用することをお勧めします。実際には、内部的に数値として格納されます。 2つのドキュメントのインデックスが同じミリ秒になると、もちろん重複する可能性があります。これを回避するために使用したトリックは、同時にインデックスされたドキュメントを1ミリ秒オフセットすることです。広告掲載オーダーを確実に維持するためです

+0

私は、この状況で1つのインデクサーがあると思います。複数のインデクサーがある場合は、広告掲載オーダーを保持できませんでした。 – hkulekci

+0

実際には、衝突の可能性は非常に小さいですが、一般的にグループ化したいドキュメントは、1つのサーバーから来ています。あなたが実際にカウンターを持っているかどうか気にしていれば、あなたは何らかの種類の分散カウンターを作ることができます。 redisまたはリレーショナルデータベースです。しかし、それはほとんど確実にボトルネックになるでしょう。 –

関連する問題