変換を使用するタイミング
Elasticsearchの集約は、データに関する複雑な洞察を要約し、取得するための強力で柔軟な機能です。地理やブラウザの種類で分けられた、忙しいウェブサイトの日ごとのウェブリクエスト数のような複雑なものを要約できます。しかし、訪問者のウェブセッションの平均時間のような単純な数値を計算しようと同じデータセットを使用すると、すぐにメモリが不足する可能性があります。
なぜこのようなことが起こるのでしょうか?ウェブセッションの持続時間は、特定のログレコードに保持されていない行動属性の一例です。これは、ウェブログの各セッションの最初と最後のレコードを見つけることによって導出する必要があります。この導出には、いくつかの複雑なクエリ式と、すべてのデータポイントを接続するための多くのメモリが必要です。関連するイベントを1つのインデックスから別のインデックスのエンティティ中心の要約に融合するバックグラウンドプロセスが進行中であれば、より有用で結合された画像が得られます。この新しいインデックスは時々データフレームと呼ばれます。
次のような場合には、集約の代わりに変換を使用することを検討するかもしれません:
- トップNのアイテムセットではなく、完全な特徴インデックスが必要な場合。
機械学習では、トップNだけでなく、完全な行動特徴セットが必要なことがよくあります。たとえば、顧客の離脱を予測する場合、過去1週間のウェブサイト訪問数、総販売数、送信されたメールの数などの特徴を考慮するかもしれません。Elastic Stackの機械学習機能は、この多次元特徴空間に基づいてモデルを作成するため、変換によって作成された完全な特徴インデックスの恩恵を受けます。このシナリオは、集約または複数の集約の結果を検索しようとする場合にも当てはまります。集約結果は順序付けられたりフィルタリングされたりできますが、順序付けの制限があり、バケットセレクターによるフィルタリングは返されるバケットの最大数によって制約されます。すべての集約結果を検索したい場合は、完全なデータフレームを作成する必要があります。複数のフィールドで集約結果をソートまたはフィルタリングする必要がある場合、変換は特に便利です。 - パイプライン集約によって集約結果をソートする必要がある場合。
パイプライン集約はソートに使用できません。技術的には、これはパイプライン集約がすべての他の集約が完了した後のリデュースフェーズ中に実行されるためです。変換を作成すると、データに対して効果的に複数回のパスを実行できます。 - クエリを最適化するために要約テーブルを作成したい場合。
たとえば、多くのユーザーがアクセスする高レベルのダッシュボードがあり、大規模なデータセットに対して複雑な集約を使用している場合、結果をキャッシュするために変換を作成する方が効率的かもしれません。これにより、各ユーザーが集約クエリを実行する必要がなくなります。