Elasticsearch で複数のインデックスを検索する方法

Elasticsearch で複数のインデックスを検索する方法

岩佐 孝浩
岩佐 孝浩
3 min read
Elasticsearch

はじめに

Elasticsearch は複数のインデックスを横断して検索するための強力な機能を提供しており、さまざまなソースから同時にデータを取得できます。このチュートリアルでは、効果的なセットアップ方法とクエリの実行方法を解説します。

(Optional, string) Comma-separated list of data streams, indices, and index aliases to search. Wildcard (*) expressions are supported.

Elasticsearch を起動する

まず、公式の Docker image を使用して、ローカル環境に Elasticsearch クラスター を起動します。以下はクラスターを構成して起動するための docker-compose.yml ファイルの例です。

version: '3'

services:
  elasticsearch:
    image: elasticsearch:7.10.1
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
    ports:
      - 9200:9200

以下のコマンドでクラスターを起動します。

docker-compose up -d

データの準備

複数のインデックスを試すために、以下の curl コマンドを使って users-2020-11users-2020-12 にデータをインデックス化します。

curl -X POST -H 'Content-Type: application/json' -d '{"name": "hoge"}' localhost:9200/users-2020-11/_doc/
curl -X POST -H 'Content-Type: application/json' -d '{"name": "fuga"}' localhost:9200/users-2020-12/_doc/

これにより、テスト用のデータを含む 2 つのインデックスが作成されます。

データを検索する

ワイルドカードを使用した検索

ワイルドカード を使用して複数のインデックスからデータをクエリすることができます。

curl localhost:9200/users-2020-*/_search | jq .hits.hits

このクエリのレスポンスは users-2020-11users-2020-12 の両方のデータを含みます。

[
  {
    "_index": "users-2020-11",
    "_type": "_doc",
    "_id": "PNQ3tXYBKT-fwQ71grcz",
    "_score": 1,
    "_source": {
      "name": "hoge"
    }
  },
  {
    "_index": "users-2020-12",
    "_type": "_doc",
    "_id": "PdQ3tXYBKT-fwQ71p7cy",
    "_score": 1,
    "_source": {
      "name": "fuga"
    }
  }
]

CSV フォーマットを使用した検索

もう一つの検索方法として、複数のインデックスを CSV で指定する方法があります。

curl localhost:9200/users-2020-11,users-2020-12/_search | jq .hits.hits

このクエリのレスポンスも users-2020-11users-2020-12 の両方のデータを含みます。

[
  {
    "_index": "users-2020-11",
    "_type": "_doc",
    "_id": "PNQ3tXYBKT-fwQ71grcz",
    "_score": 1,
    "_source": {
      "name": "hoge"
    }
  },
  {
    "_index": "users-2020-12",
    "_type": "_doc",
    "_id": "PdQ3tXYBKT-fwQ71p7cy",
    "_score": 1,
    "_source": {
      "name": "fuga"
    }
  }
]

まとめ

Elasticsearch で複数のインデックスを検索することは、複雑なアプリケーションでデータを取得する際に柔軟性と効率性を提供します。ワイルドカードCSV フォーマット を活用することで、クエリを効率的に実行できます。

詳細については、Elasticsearch Search API Documentation をご参照ください。

Happy Coding! 🚀

岩佐 孝浩

岩佐 孝浩

Software Developer at KAKEHASHI Inc.
AWS を活用したクラウドネイティブ・アプリケーションの要件定義・設計・開発に従事。 株式会社カケハシで、処方箋データ収集の新たな基盤の構築に携わっています。 Japan AWS Top Engineers 2020-2023