Elasticsearch で複数インデックスを跨いだ検索

Elasticsearch で複数インデックスを跨いだ検索

Takahiro Iwasa
Takahiro Iwasa
3 min read
Elasticsearch

Elasticsearch は複数のインデックス(例えば、 index-2020-01, index-2020-02)を跨いだ検索をサポートしています。

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

Elasticsearch 起動

Docker イメージを使用して、ローカル PC で 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

以下のコマンドで Elasticsearch クラスターを起動してください。

docker-compose up -d

データ準備

以下のコマンドで users-2020-11 および users-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/

テスト

ワイルドカードで検索

以下のコマンドで検索してください。 users-2020-11 および users-2020-12 から返されたデータが表示されます。

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

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   380  100   380    0     0  95000      0 --:--:-- --:--:-- --:--:-- 95000
[
  {
    "_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 で検索

以下のコマンドで検索してください。 users-2020-11 および users-2020-12 から返されたデータが表示されます。

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

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   380  100   380    0     0  63333      0 --:--:-- --:--:-- --:--:-- 63333
[
  {
    "_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"
    }
  }
]

まとめ

複数のインデックスに分割することで、クラスターが運用しやすくなるかもしれません。

この投稿が、お役に立てば幸いです。

Takahiro Iwasa

Takahiro Iwasa

Software Developer at KAKEHASHI Inc.
Involved in the requirements definition, design, and development of cloud-native applications using AWS. Now, building a new prescription data collection platform at KAKEHASHI Inc. Japan AWS Top Engineers 2020-2023.