2017-01-03 13 views
5

ウェブサイトがロードされるたびに実行されるクエリがあります。このクエリは、3つの異なる用語フィールドと約300万のドキュメントを集約し、したがって完了までに6〜7秒を要します。データはそれを頻繁に変えず、結果の現状は重要ではありません。ElasticSearchのような「マテリアライズドビュー」のようなもの

私は別名を使用してRDMSの世界のような「ビュー」を作成できることを知っています。それを埋めることも可能なので、クエリの結果はキャッシュされますか?このシナリオでキャッシュが助けになる他の方法はありますか、集計されたデータの追加インデックスを作成し、時々更新する必要がありますか?

+0

3百万個のドキュメントを集約するのは本当にたくさんありません。クエリが実行されてから最初に最適化されるまでに6〜7秒かかるのはなぜか分かります。 – Val

+0

さて、どうすればいい?私はslowlogsを有効にしましたが、あなたにはあまり情報がありません。 'aggFieldName ':{" terms ":{" field ":" myField "、" size ":0}}、' – nik

+1

最初に 'あなたのクエリーで「explain = true」を読んで、いくつかの洞察を得てください。次に、[Profile API](https://www.elastic.co/guide/en/elasticsearch/reference/current/_profiling_aggregations.html)を使用して集計をプロファイリングすることができます – Val

答えて

-1

マテリアライズドビューを作成します。最終的に集約された関数のデータを持つテーブルを作成します。集計されたデータを既に挿入しているので、クエリを実行すると高速になります。私はキャッシュする必要もないと感じています。私はMVを作成しましたが、パフォーマンスが大幅に向上します。データが頻繁に変更されていない場合は、集約クエリをキャッシュすることができます。私はMVと弾性検索が同じパフォーマンスを提供すると感じます。

関連する問題