ドキュメント(Document)
Elasticsearchはドキュメント指向のストレージであり、ドキュメントが検索可能な最小単位となる。例えば、ログエントリ、映画情報、楽曲メタデータなどが該当する。
各ドキュメントはJSON形式で保存され、フィールドの集合体として構成される。フィールドタイプは文字列、数値、ブール値、日時、バイナリ、範囲など多様で、Elasticsearchが自動推論することも可能。各ドキュメントには一意のIDが付与され、ユーザー指定または自動生成が選択できる。
JSONドキュメントの例
CSV形式の映画データをJSONに変換すると以下のようになる:
{
"year": 1995,
"@version": "1",
"genre": ["Adventure", "Animation", "Children", "Comedy", "Fantasy"],
"id": "1",
"title": "Toy Story"
}
このように、配列やネスト構造も自然に表現できる。
メタデータ
ドキュメントには以下のメタデータが自動的に付与される:
_index:所属インデックス名_type:タイプ名(7.x以降は非推奨)_id:ドキュメントの一意識別子_source:元のJSONデータ本体_score:検索時の関連スコア
インデックス(Index)
インデックスはドキュメントの論理的なコンテナであり、同一スキーマ(マッピング)を持つドキュメントの集合を表す。内部的には複数のシャード(物理分割単位)に分散保存される。
インデックス設定には以下が含まれる:
- マッピング(Mapping):フィールド名とそのデータ型を定義
- 設定(Settings):シャード数やレプリカ数などの運用パラメータ
「インデックス」の多義性
- 名詞:ドキュメントの集合(例:moviesインデックス)
- 動詞:ドキュメントを保存する行為(indexing)
- 技術用語:転置インデックス(全文検索のためのデータ構造)
RDBMSとの類似点と相違点
| RDBMS | Elasticsearch |
|---|---|
| テーブル | インデックス(7.0以降は_type廃止) |
| 行 | ドキュメント |
| カラム | フィールド |
| スキーマ | マッピング |
| SQL | Query DSL |
Elasticsearchはスキーマレス設計、関連性に基づく検索、高速な全文検索に特化しており、トランザクションやJOIN機能は提供しない。
REST APIによる操作
ElasticsearchはHTTPベースのRESTful APIを提供し、あらゆるプログラミング言語から操作可能。
インデックス情報の取得
GET /kibana_sample_data_ecommerce
ドキュメント総数の確認
GET /kibana_sample_data_ecommerce/_count
サンプルドキュメントの表示
POST /kibana_sample_data_ecommerce/_search
全インデックス一覧(フィルタ付き)
GET /_cat/indices/kibana*?v&s=index
ステータスがgreenのインデックスのみ表示
GET /_cat/indices?v&health=green
ドキュメント数で降順ソート
GET /_cat/indices?v&s=docs.count:desc
特定フィールドのみ出力
GET /_cat/indices/kibana*?pri&v&h=health,index,pri,rep,docs.count,mt
インデックスごとのメモリ使用量確認
GET /_cat/indices?v&h=i,tm&s=tm:desc