ページ

2016年2月18日木曜日

Elasticsearchを学ぶ1 - 概要 -


前回サクッと触れてみましたが、 今回じっくり触ってみたいと思います。
※環境は前回の環境を使用します。

概用


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 件のコメント:

コメントを投稿