Elasticsearch では、インデックス作成とは、データを簡単に検索できるように保存および整理するプロセスを指します。ドキュメント内のすべてのフィールドにインデックスを作成すると便利な場合もありますが、特定のフィールドをインデックス作成から除外したい場合もあります。これにより、パフォーマンスが向上し、ストレージ コストが削減され、Elasticsearch インデックスの全体的なサイズが最小限に抑えられます。
この記事では、インデックス作成からフィールドを除外する理由、特定のフィールドを除外するように Elasticsearch を構成する方法、およびそうする際に従うべきベスト プラクティスについて説明します。
フィールドをインデックスから除外する理由
- パフォーマンス:ドキュメント内のすべてのフィールドにインデックスを作成すると、インデックス作成時間が長くなり、検索パフォーマンスが低下する可能性があります。検索や集計に必要のないフィールドを除外することで、Elasticsearch クラスターの全体的なパフォーマンスを向上させることができます。
- ストレージ:フィールドのインデックス作成により、ストレージ スペースが消費されます。検索や集計に必要のないフィールドを除外すると、Elasticsearch クラスターのストレージ要件を削減できます。
- インデックス サイズ: Elasticsearch インデックスのサイズは、インデックスが作成されるフィールドの数に直接関係します。不要なフィールドを除外することで、インデックスのサイズを最小限に抑えることができ、検索とインデックス作成のパフォーマンスが向上します。
フィールドを除外するようにElasticsearchを構成する
Elasticsearch でフィールドをインデックスから除外するには、フィールドのマッピングで「index」プロパティを使用できます。「index」プロパティを「false」に設定すると、Elasticsearch はフィールドにインデックスを付けず、検索や集計に使用できなくなります。
Elasticsearch マッピングを使用してフィールドをインデックスから除外する方法の例を次に示します。
この例では、「field_to_exclude」という単一のフィールドを持つ「my_index」という新しいインデックスを作成しています。「index」プロパティを「false」に設定することで、Elasticsearch にこのフィールドをインデックスしないように指示します。ただし、フィールドはソース ドキュメントでは引き続き使用できます。
インデックスからフィールドを除外するためのベストプラクティス
- データを分析する:フィールドをインデックスから除外する前に、データを分析し、検索と集計に必要なフィールドを理解することが重要です。これにより、どのフィールドを除外するかについて十分な情報に基づいた決定を下すことができます。
- 変更をテストする:フィールドをインデックス作成から除外する場合は、検索機能と集計機能が期待どおりに動作することを確認するために、変更をテストすることが重要です。これにより、予期しない問題やパフォーマンスの問題を回避できます。
- パフォーマンスを監視する:フィールドをインデックスから除外した後、Elasticsearch クラスターのパフォーマンスを監視して、変更が目的の効果をもたらしたことを確認します。これにより、必要となる可能性のある追加の最適化を特定するのに役立ちます。
- ソース フィルタリングを使用する: Elasticsearch にフィールドを保存する必要があるが、検索可能にしたり集計に使用したりしたくない場合は、ソース フィルタリングの使用を検討してください。これにより、フィールドを _source フィールドに保存しながら、インデックスからは除外することができます。
まとめ
Elasticsearch のインデックス作成からフィールドを除外すると、パフォーマンスの向上、ストレージ コストの削減、インデックスの全体的なサイズの最小化に役立ちます。データを慎重に分析し、検索と集計に必要なフィールドを理解することで、どのフィールドを除外するかについて十分な情報に基づいた決定を下すことができます。常に変更をテストし、Elasticsearch クラスターのパフォーマンスを監視して、最適化が期待どおりの効果をもたらすことを確認してください。




