2016-10-21 13 views
1

Q:sizeのインデックス(_statsを使用)を最後に更新してから、どのようにして最新のものにすることができますか?Elasticsearch:インデックスの最新サイズを取得

私はElasticsearchクラスタでいくつかのパフォーマンステストを行っています。コードは効果的である:

Create INDEX 
Set refresh_interval to -1 (don't refresh while inserting) 
Insert 2000 documents into INDEX 
Set refresh_interval back to 1 (default) 

Force a refresh of INDEX 
Get _stats of INDEX (particularly to get the size) 

私の理解では、その文書are indexedは、彼らが最初にESメモリ内のバッファに挿入されたとき。リフレッシュを強制すると、ESはバッファにまだ残っているドキュメントのLuceneセグメントを作成します。 (ドキュメントバッファがLuceneセグメントにも含まれている場合がいくつかあります)

私はrefreshing the indexがその時点までのドキュメントを検索可能にすると確信しています。私はESが検索可能にする文書が_statsにも反映されることを期待しています。しかし、私は、統計リクエストのサイズが非確定的に不正確であることを発見しました(例えば23602の代わりに520バイトのようなものかもしれません)。

私はリフレッシュ後、_statsコールの前に、さまざまな成功を収めて自分のプロセスをスリープ状態にしました。しかし、最新の統計情報を取得するための適切で一貫したソリューションがあるかどうかは疑問です。 (あるいは私の理解に何かが間違っている場合)。

すぐに2000のドキュメントを挿入した後、私は、ある意味では(繰り返し)を手動_statsを実行し、結果を確認します。ある程度の時間のために、5秒の周りに、私はこれが表示されます。

"primaries": { 
    "docs": { 
    "count": 2000, 
    "deleted": 0 
    }, 
    "store": { 
    "size_in_bytes": 520, 
    "throttle_time_in_millis": 0 

を次に(ESが突然最近の変更と一致になると)、私はわかります

"primaries": { 
    "docs": { 
    "count": 2000, 
    "deleted": 0 
    }, 
    "store": { 
    "size_in_bytes": 23602, 
    "throttle_time_in_millis": 0 

この結果をします新しい文書が追加されない限り、無期限に存続します。

+0

を参照して、ユニットテストのためにも使用されていますか?私たちにいくつかの数字とあなたが何を期待しているかを示してください。 – Val

+0

ああ、そうです。 '_stats'呼び出しでインデックスのサイズが正しくないことがわかりました。私は、 'bulk'呼び出しで1000個の文書(それぞれタイムスタンプ、ダブル、文字列のリストを含む)を索引付けします。インデックス上で 'refresh'を呼び出します。それから私はインデックス上で 'stats'を呼び出します。応答は、合計で130バイトのインデックスを示します。私はすぐにSenseから '_stats'を手動で呼び出すことができ、135976バイトがあることを知ることができます(これは、インデックスの要約ページにこの巨大で妥当な数字が表示されます)。 – FluxLemur

+0

実行しているコマンド(コード)のリストを表示できますか? – Val

答えて

2

私は10秒にhttps://github.com/elastic/elasticsearch/blob/5.1/core/src/main/java/org/elasticsearch/index/store/Store.java#L133-L134

それはデフォルトを参照してください、これはINDEX_STORE_STATS_REFRESH_INTERVAL_SETTINGに関連していると思いますが、あなたはindex.store.stats_refresh_interval経由で値を変更することができます。パフォーマンス上のオーバーヘッドがどれだけ導入されるかわからないので、値を変更することを検討する場合は注意深くテストしてください。

これは、あなたが「それが偽表示されます」と思わせる何かhttps://github.com/elastic/elasticsearch/blob/5.1/core/src/test/java/org/elasticsearch/index/store/StoreTests.java#L760

+0

ありがとう、素敵な発見。 '' 'PUT/my_index :だから、より一般的な観点から、私はこの設定はのようなもので変更することができると思います{ "設定": " index.store stats_refresh_interval"{ :1 } }' '' – FluxLemur

+0

設定は時間値の文字列でなければならないので、1秒間の統計更新間隔でインデックスを作成すると、 'PUT/my_index {" settings ":{" index.store.stats_refresh_interval ":" 1s "}}'となります。 – FluxLemur

関連する問題