複数の Elasticsearch インデックスを横断して検索する

複数の Elasticsearch インデックスを横断して検索する

ワイルドカードパターンと明示的なカンマ区切りリストという 2 つの方法で、複数の Elasticsearch インデックスを一度にクエリする。

Takahiro Iwasa
3 min read

Elasticsearch では、ワイルドカードパターンまたは明示的なカンマ区切りリストのいずれかを使って、複数のインデックスを一度にクエリできます。

Elasticsearch の起動

以下は、クラスタを構成・起動するための docker-compose.yml ファイルの例です。

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

クラスタを起動します。

Terminal window
docker-compose up -d

データの準備

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

Terminal window
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/

データの検索

ワイルドカードによる検索

ワイルドカード式を使うと、単一のクエリで複数のインデックスにまたがるデータにマッチさせられます。

Terminal window
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 形式による検索

もう一つの方法は、複数のインデックスをカンマ区切りのリストで指定する方法です。

🔥 Caution

この方法を使う場合は、URL の長さが上限を超えないように注意してください。

Terminal window
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"
}
}
]

まとめ

users-2020-11users-2020-12 に対して、ワイルドカードパターンと明示的なカンマ区切りリストの両方で同一のヒット結果が返ってきました。したがって両者の実質的な違いは、クエリのスケールの仕方にのみ現れます。users-2020-* のようなワイルドカードパターンは、月次インデックスがどれだけ積み重なっても長さが変わらないため、時系列ベースのインデックス命名スキームにはより持続性のある選択肢です。一方、カンマ区切り形式は、対象のインデックスの集合が小さく、あらかじめわかっている場合には理解しやすいという利点がありますが、リストが増えるにつれて URL の長さ制限に注意が必要になる点は覚えておくべきです。

About the author

Takahiro Iwasa

Takahiro Iwasa

Software Developer

This blog shares technical notes from hands-on projects—architecture, implementation, and AWS service integrations.