# Elasticsearchの機能と実践的な使い方
📦 「テーブル設計を固めてから」ではなく、JSONを投げ込んだ瞬間からデータが扱える。Elasticsearchのインデックスは、検索もスケールも前提にしたドキュメント指向データストアです。
🏷️ タイトル: インデックス(Index)/ ドキュメント指向データストア
🔗 URL:
📘 概要
インデックスはElasticsearchにおけるデータ格納の基本単位で、あなたが操作する論理的なまとまりです。データは1件ずつJSONの「ドキュメント」として格納され、各ドキュメントはフィールドのキーと値の集合に加えて`_index`・`_id`・`_version`といったメタデータを持ちます。
⚙️ 機能の説明
・実データは`_source`フィールドに入り、`_index`(所属インデックス)・`_id`(一意ID)・`_version`(バージョン)などはシステム管理のメタデータです。
・各フィールドの型や、どうインデックス・検索するかは「マッピング(mapping)」で決まります。`text`(全文検索向け)・`keyword`(完全一致・集計向け)・`integer`・`date`などを使い分けます。
・マッピングを明示しなくても、投入されたJSONから型を推測する「ダイナミックマッピング」が働くため、新しいフィールドを後から足してもそのまま取り込めます。
・内部では1つのインデックスが複数の「シャード」に分割され、ノード間に分散配置されます。シャード内のデータは不変(immutable)な「セグメント」として書かれ、レプリカシャードによって冗長性とスケールを確保します。
・`index.number_of_shards`(作成時固定)、`index.number_of_replicas`(後から変更可)、`index.refresh_interval`(既定1秒)などの設定でインデックスの挙動を制御します。
🛠️ 実践的な使い方
ドキュメント1件の投入はシンプルです。
`POST products/_doc/p-1001`
`{ "name": "ワイヤレスイヤホン", "price": 8900, "stock": 120, "category": "audio" }`
大量投入には`_bulk` APIを使い、1リクエストで多数の操作をまとめます。
`POST products/_bulk`
`{ "index": { "_id": "p-1001" } }`
`{ "name": "ワイヤレスイヤホン", "price": 8900 }`
`{ "index": { "_id": "p-1002" } }`
`{ "name": "USB-Cケーブル", "price": 1200 }`
新フィールド(例: `sustainability_score`)を後から含めて投入しても、ダイナミックマッピングがそのまま受け付けます。
💡 ユースケース
ECサイトの商品カタログを`products`インデキスとして作り、1商品=1JSONドキュメント(商品名・価格・在庫・カテゴリ・説明文)で管理する構成が定番です。日次バッチで`_bulk`を使って数十万件を一括投入し、RDBのスキーマ変更を待たずに新しい属性を追加していけます。
⚠️ 注意点
・一度決めたフィールドの「型」は後から変更できません。型を変えたい場合は新インデックスへの再インデックス(reindex)が必要です。
・頻繁に同じドキュメントを更新する用途には通常のインデックスを、追記中心の時系列データにはデータストリームを使うのが推奨です。
・シャードの数とサイズはクエリ速度とクラスタ安定性に直結します。小さすぎる大量のシャードは避け、適切なサイズ設計を意識してください。
#
Elasticsearch# #
データモデリング#