私はelasticsearchを初めて使用しています。現在、私は時間インデックスに格納されているドキュメントを持っており、それらは時系列データです。私が把握しようとしているのは、フィールド値のみを効率的に抽出する方法です。フィールド値は"key": { "type": "long" }
と定義されています。私は最初、すべてのインデックスをスクロールしてフィールドを抽出する単純な方法を試みましたが、明らかにそれは非常に迅速に完了しません。毎時インデックスは約10Mのドキュメントを持ち、3つのインデックスをスクロールするのに、弾性検索用の文書の1つのフィールドを効率的に取得する方法
は、それから私は、terms aggregationsに来集約用語としてkey
フィールドを作ってみました:
"aggregations": {
"test_group": {
"terms": {
"field": "key",
"size": 100000
}
}
}
ユーザーが歴史を検索しようとして私に良いパフォーマンスが、それでもリアルタイムシステムとして十分ではありませんを与えますkey
は高いカーディナリティフィールドです。私は、全体の応答に非自明な時間を追加して、いくつかの処理を、出力を解析して行うためにelastic search go libraryを使用していますので、
size = 50k, indices = 4, time range = 3hrs: 7.1s
size = 100k, indices = 4, time range = 3hrs: 7.669s
size = 1m, indices = 4, time range = 2hrs: 12.669s
size = 1m, indices = 4, time range = 3hrs: 14.669s
これは、これで終わりではありません。いくつかの大まかなベンチマークは、と言ってくれました。
私の質問です:これは既にESが行うことができますか?私が行方不明になっている他の方法はありますか?私は現在、クラスタのES 5.6と3ノードにあり、すべてAmazon i3-4xlインスタンスを使用しています。ありがとう。
私はそれがうまくいくとは思わない。最初に 'scroll'を使う理由は、大きなデータセットを問い合わせるのに' query'を使うのはESが勧められないからです。 yamlファイルで制限を変更できる場合でも、最後の解決策としてプレーンクエリを使用する前に、他のオプションを探してみたいと思います。 –