ElasticsearchのコアコンセプトとREST API活用ガイド

ドキュメント(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との類似点と相違点

RDBMSElasticsearch
テーブルインデックス(7.0以降は_type廃止)
行ドキュメント
カラムフィールド
スキーママッピング
SQLQuery 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

タグ: Elasticsearch REST API 全文検索 JSON インデックス

10月2日 01:58 投稿