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"
}
}
]
まとめ
複数のインデックスに分割することで、クラスターが運用しやすくなるかもしれません。
この投稿が、お役に立てば幸いです。