概用
Elasticsearchのデータ構造を公式のドキュメントを読んで自分なりにまとめてみました
※間違っていたら教えて頂けると助かります。
※間違っていたら教えて頂けると助かります。
- Cluster・・・1つかそれ以上のNodeを持ち、複数のNodeをまたいで検索できる
クラスタにはユニークな名前をつける必要がある - Node・・・クラスタ内の要素、デフォルトの名前はMarvelのキャラクターの名前が付けられる
- Index・・・データの集合、集合の特徴を表す名前にする。例) customer, product
- Type・・・マッピングタイプ。Index内の要素でデータのタグみたいなもの
- Document・・・最小単位のデータ。DocumentのデータがJSON形式で表現される
- Shards・・・一つのIndexに膨大なデータを登録する際などに、細分化する仕組み
実際はLuceneのインスタンス
図にするとこんな感じのイメージです。
サンプルデータ投入
公式ページにサンプルの顧客データが用意されているので、それを使おうと思います。
※公式ページのサンプルデータと同じリンクを貼っときます here
早速ダウンロードした
accounts.json
を登録してみたいと思います。accounts.json
と同じディレクトリで以下コマンドを実行。$ curl -XPOST ‘localhost:9200/bank/account/_bulk?pretty' --data-binary "@accounts.json"
↑のコマンドでは
Index
がbank、Type
がaccountにデータを登録します- 実際に登録できたか確認
$ curl ‘localhost:9200/_cat/indices?v'health status index pri rep docs.count docs.deleted store.size pri.store.size
yellow open bank 5 1 1000 0 442.1kb 442.1kb
docs.count
を見ると1000件のDocument
が登録されているのがわかります。検索してみる
単純にaccount_numberが20のアカウントを検索してみます。
$ curl -XPOST ‘localhost:9200/bank/_search?pretty' -d '{
"query": { "match": { "account_number": 20 } }
}'
検索時にはQueryDSLを使って検索します。
成功すれば以下のレスポンスが返ってくると思います。
{
"took" : 20,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 5.6587105,
"hits" : [ {
"_index" : "bank",
"_type" : "account",
"_id" : "20",
"_score" : 5.6587105,
"_source" : {
"account_number" : 20,
"balance" : 16418,
"firstname" : "Elinor",
"lastname" : "Ratliff",
"age" : 36,
"gender" : "M",
"address" : "282 Kings Place",
"employer" : "Scentric",
"email" : "elinorratliff@scentric.com",
"city" : "Ribera",
"state" : "WA"
}
} ]
}
}
それぞれのパラメータの意味は・・
- took - Elasticsearchが検索にかかった時間(ms)
- timed_out - タイムアウトしたかどうかの真偽値
- _shards 検索するのにどれだけの
Shards
を使用したか - hits 検索結果
- hits.total 検索
Document
数 - hits.hits 検索結果の配列(デフォルトでは先頭の10件表示)
0 件のコメント:
コメントを投稿