バルク インデクサーなしで curl を使用して、データベースから ES にすべてのデータのインデックスを作成しようとしています。データ レコードごとにインデックスを作成しています。正常に動作していますが、データが約 80000 以上のドキュメントを超えると、ES はレコードをスキップし始めます。いくつかのレコードをスキップした後、再び機能し始め、同じ動作が返されます...これについて何か考えがありますか?
1 に答える
インデックス作成は 3 ステップのプロセスです。
- インデックス作成リクエストを受け入れる
- トランザクション ファイルのフラッシュ (インデックス)
- 更新 (サーチャーを再作成します。これは内部的なものですが、ドキュメントを更新した後は検索に使用できます。デフォルトでは 1 に設定されています)
あなたの場合、各ステップで何かがうまくいかなかった可能性があります。たとえば、インデックス作成リクエストの送信が速すぎると、一部のリクエストが拒否される可能性があります (ただし、エラーが表示されるはずです)。
ドキュメントがまだトランザクション ログに残っている可能性があります (フラッシュを待機していて、ドキュメントが表示されない) 。この動作を微調整するためのインデックス設定がいくつかあります。次の設定に興味があります:
index.translog.flush_threshold_ops
操作に基づいていつフラッシュするか。index.translog.flush_threshold_size
トランスログ (バイト) サイズに基づいていつフラッシュするか。index.translog.flush_threshold_period
フラッシュしない期間に基づいていつフラッシュするか。index.translog.disable_flush
フラッシングを無効にします。短い間隔で設定してから有効にする必要があることに注意してください。
前述したように、デフォルトでは 1 秒ごとに更新が行われますが、インデックス設定 ( index.refresh_interval
) で設定できます。インデックス作成のパフォーマンスを向上させるために、多くのドキュメントをインデックス化するときは通常、更新を無効にします。詳細については、ElasticSerachで更新を無効にするを参照してください。
私の経験から、ES はドキュメントを失うことはありません。それは、ドキュメントがまだ検索に利用できないということです。私の仲間はよく同じことについて不平を言います.私はいつも「5分待ってもう一度チェックしてください」とリプレイします.彼らは通常戻ってきません.
ElasticSearch は、十分なメモリがない場合に有線処理を実行することがあります。たとえば、インデックス付きドキュメントのフィールドが失われています (このような SO に関する質問を見ました。解決策はヒープ サイズを増やすことでした)。詳細については、 ElasticSearch 構成 を参照してください。