ランタイムフィールド
ランタイムフィールドは、クエリ時に評価されるフィールドです。ランタイムフィールドを使用すると、次のことが可能になります:
- データを再インデックス化せずに既存のドキュメントにフィールドを追加する
- データの構造を理解せずにデータを扱い始める
- クエリ時にインデックスフィールドから返される値をオーバーライドする
- 基本的なスキーマを変更せずに特定の用途のためにフィールドを定義する
ランタイムフィールドには、他のフィールドと同様に検索APIからアクセスできます。Elasticsearchはランタイムフィールドを特別扱いしません。ランタイムフィールドは、インデックスマッピングまたは検索リクエストで定義できます。これは、ランタイムフィールドの本質的な柔軟性の一部です。
fields
パラメータを_search
APIで使用して、ランタイムフィールドの値を取得します。ランタイムフィールドは_source
に表示されませんが、fields
APIはすべてのフィールドに対して機能し、元の_source
の一部として送信されなかったフィールドでも機能します。
ランタイムフィールドは、特にデータ構造が不明な場合にログデータを扱う際に便利です(例を参照)。検索速度は低下しますが、インデックスサイズははるかに小さく、インデックス化せずにログをより迅速に処理できます。
利点
ランタイムフィールドはインデックス化されないため、ランタイムフィールドを追加してもインデックスサイズは増加しません。インデックスマッピングでランタイムフィールドを直接定義することで、ストレージコストを節約し、取り込み速度を向上させます。Elastic Stackにデータをより迅速に取り込み、すぐにアクセスできます。ランタイムフィールドを定義すると、検索リクエスト、集計、フィルタリング、ソートですぐに使用できます。
ランタイムフィールドをインデックスフィールドに変更する場合、ランタイムフィールドを参照するクエリを変更する必要はありません。さらに、フィールドがランタイムフィールドであるインデックスと、フィールドがインデックスフィールドである他のインデックスを参照できます。どのフィールドをインデックス化し、どのフィールドをランタイムフィールドとして保持するかを選択する柔軟性があります。
本質的に、ランタイムフィールドの最も重要な利点は、取り込んだ後にドキュメントにフィールドを追加できる能力です。この機能により、データを事前に解析する方法を決定する必要がなくなり、いつでもマッピングを修正するためにランタイムフィールドを使用できます。ランタイムフィールドを使用すると、インデックスが小さくなり、取り込み時間が短縮され、リソースの使用量が減り、運用コストが削減されます。
インセンティブ
ランタイムフィールドは、_search
APIでスクリプトを使用する多くの方法を置き換えることができます。ランタイムフィールドの使用方法は、含まれるスクリプトが実行されるドキュメントの数に影響されます。たとえば、fields
パラメータを_search
APIで使用してランタイムフィールドの値を取得する場合、スクリプトはスクリプトフィールドと同様にトップヒットに対してのみ実行されます。
[_source
]内の値にアクセスし、スクリプト評価に基づいて計算された値を返すためにスクリプトフィールドを使用できます。ランタイムフィールドは同じ機能を持っていますが、検索リクエストでランタイムフィールドに対してクエリや集計を行えるため、より柔軟性があります。スクリプトフィールドは値を取得するだけです。
同様に、スクリプトに基づいて検索リクエスト内のドキュメントをフィルタリングするスクリプトクエリを書くことができます。ランタイムフィールドは、より柔軟な非常に似た機能を提供します。スクリプトを書いてフィールド値を作成し、それらはfields
、すべてのクエリ、および集計など、どこでも利用可能です。
また、スクリプトを使用して検索結果をソートできますが、その同じスクリプトはランタイムフィールドでも同じように機能します。
検索リクエストのこれらのセクションからスクリプトを移動して、同じ数のドキュメントから値を計算するランタイムフィールドに移動すると、パフォーマンスはほぼ同じであるはずです。これらの機能のパフォーマンスは、含まれるスクリプトが実行している計算と、スクリプトが実行されるドキュメントの数に大きく依存します。
ランタイムフィールド
ランタイムフィールドは、クエリ時に評価されるフィールドです。ランタイムフィールドを使用すると、次のことが可能になります:
- データを再インデックス化せずに既存のドキュメントにフィールドを追加する
- データの構造を理解せずにデータを扱い始める
- クエリ時にインデックスフィールドから返される値をオーバーライドする
- 基本的なスキーマを変更せずに特定の用途のためにフィールドを定義する
ランタイムフィールドには、他のフィールドと同様に検索APIからアクセスできます。Elasticsearchはランタイムフィールドを特別扱いしません。ランタイムフィールドは、インデックスマッピングまたは検索リクエストで定義できます。これは、ランタイムフィールドの本質的な柔軟性の一部です。
fields
パラメータを_search
APIで使用して、ランタイムフィールドの値を取得します。ランタイムフィールドは_source
に表示されませんが、fields
APIはすべてのフィールドに対して機能し、元の_source
の一部として送信されなかったフィールドでも機能します。
ランタイムフィールドは、特にデータ構造が不明な場合にログデータを扱う際に便利です(例を参照)。検索速度は低下しますが、インデックスサイズははるかに小さく、インデックス化せずにログをより迅速に処理できます。