2017-06-18 46 views
0

私はelasticsearch.jsを使用してドキュメントをあるインデックスから別のインデックスに移動しています。elasticクエリは、挿入後に同じ結果を返します

1a)すべてのドキュメントのindex_newを照会し、ページに表示します。 1b)index_oldのクエリを使用してidでドキュメントを取得します。 2)index_oldの結果を挿入するindex_newへの挿入を使用します。 3)index_oldから文書を削除する(idで)。

4)すべてのドキュメント(新しいものを含む)を表示するには、再クエリindex_new。ただし、この時点では、1aで返されたのと同じ結果リストが返されます。新しい文書は含まれません。

これはキャッシュのためですか?私はページ全体をリフレッシュし、1aがトリガーされると、新しい文書がそこにあります。しかし、リフレッシュなしではありません。

おかげで、 ダニエル

答えて

0

これはシャードとレプリカあたりelasticsearchインデックス内部で起こるマージセグメントとさわやかによるものです。

インデックスに書き込むときは、元のインデックスファイルに書き込むのではなく、セグメントと呼ばれる新しい小さなファイルに書き込むと、バックグラウンドバッチジョブで大きなファイルにマージされます。あなたが持つかもしれない

次の質問は はどのくらいの頻度でこの事が起こるんですかどのように1は、REFRESH_INTERVALと呼ばれるインデックス・レベルの構成の設定があり、この

  1. を制御することができます。使用する戦略の種類に応じて複数の値を設定できます。

    REFRESH_INTERVAL -

-1:マージを扱うelasticsearch停止し、あなたがelasticsearchで_refresh APIを使用して終わりに制御することができます。

X:xは整数で秒単位の値です。したがって、elasticsearchはx秒ごとにすべてのインデックスを更新します。

  1. インデックスにレプリケーションが有効になっている場合、結果値の切り替えが発生する可能性があります。これは、インデックスに複数のシャードがあり、シャードに複数のレプリカがあるためです。したがって、異なるレプリカは、リフレッシュのために異なるウィンドウパターンを有する。したがって、クエリを照会すると、その間に異なるシャードレプリカに実際にルーティングされ、時間ウィンドウ内の異なる状態を示す。
  2. したがって

あなたはリフレッシュ間隔の期間を設定する設定を使用している場合は、最大で2倍の秒の隣にXで一貫性のある状態を持っていると仮定します。

Segment Merge Background details

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-refresh.html

https://www.elastic.co/guide/en/elasticsearch/reference/5.4/indices-update-settings.html

+0

二つのマイナーコメント:あなたは[ 'リフレッシュ= wait_for']に見たいと思うかもしれません(https://www.elastic.co/guide/en/あなたがIDでフェッチすると、最新のバージョンが得られます(5.x +のバックグラウンドで強制的にリフレッシュされます; translogから値を読み込む前に) – xeraa

関連する問題