2015年2月6日金曜日

ElasticSearch 決定版ガイドで学習 その2

ElasticSearch導入のための学習とまとめ。

環境

  • vagrant1.6.5
  • centos6.5

Talking to Elasticsearch

Elasticsearchへリクエストを送る場合、以下の構文を使用する


curl -X<VERB> '<PROTOCOL>://<HOST>/<PATH>?<QUERY_STRING>' -d '<BODY>'

例:クラスターの中のドキュメントの数をカウント

コマンドで叩きます


curl -XGET 'http://192.168.33.19:9200/_count?pretty' -d '
{
    "query": {
        "match_all": {}
    }
}
'

// 結果
{
  "count" : 0,
  "_shards" : {
    "total" : 0,
    "successful" : 0,
    "failed" : 0
  }
}

まだ何もやってないので、全部0なのかな。多分。header情報も見たいときはcurlに-iオプションを追加する。


curl -i -XGET 'http://192.168.33.19:9200/'
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 347

{
  "status" : 200,
  "name" : "Hate-Monger",
  "cluster_name" : "elasticsearch-changed",
  "version" : {
    "number" : "1.4.2",
    "build_hash" : "927caff6f05403e936c20bf4529f144f0c89fd8c",
    "build_timestamp" : "2014-12-16T14:11:12Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.2"
  },
  "tagline" : "You Know, for Search"
}

ちゃんとheaderが表示できましたね。

Document Oriented

Elasticsearchはドキュメントベースでデータを管理し、jsonを利用している。indexもドキュメント。

Finding Your Feet

チュートリアルをやってElasticsearchを理解しよう。ここでは従業員のディレクトリを作ってチャレンジするよ。要件は以下

  • 複数のタグ、値、数値、テキストを含むデータを利用できる
  • あらゆる従業員の詳細を検索する
  • 30歳以上の従業員を見つけるような、構造化された検索を許可
  • 単純なフルテキスト検索と、より複雑なフレーズ検索を許可
  • 一致するドキュメントのテキストの中から、強調された検索の断片を返す
  • 分析的なダッシュボードを作成できる

Indexing Employee Documents

Elasticsearchにデータを保存することを「indexing」と呼ぶ。
「indexing」の前に保存場所を決める。
Elasticsearchでは、documentはtypeに属する。これらのtypeはindexの中にあるよ。

Relational DB ⇒ Databases ⇒ Tables ⇒ Rows ⇒ Columns
Elasticsearch ⇒ Indices ⇒ Types ⇒ Documents ⇒ Fields

データの登録


curl -XPUT 'http://192.168.33.19:9200/megacorp/employee/1' -d '
{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}
'

{"_index":"megacorp","_type":"employee","_id":"1","_version":1,"created":true}

/megacorp/employee/1に3つの情報が含まれているのに注意。

megacorp : The index name
employee : The type name
1 :The ID of this particular:employee

うまく登録できたみたいなので、ブラウザから叩く。


// ブラウザで叩く
http://192.168.33.19:9200/megacorp/employee/1

// 結果表示

{"_index":"megacorp","_type":"employee","_id":"1","_version":1,"found":true,"_source":
{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}
}

成功です。どんどん登録します。


// 登録

curl -XPUT 'http://192.168.33.19:9200/megacorp/employee/2' -d '
{
    "first_name" :  "Jane",
    "last_name" :   "Smith",
    "age" :         32,
    "about" :       "I like to collect rock albums",
    "interests":  [ "music" ]
}
'

// 登録

curl -XPUT 'http://192.168.33.19:9200/megacorp/employee/3' -d '
{
    "first_name" :  "Douglas",
    "last_name" :   "Fir",
    "age" :         35,
    "about":        "I like to build cabinets",
    "interests":  [ "forestry" ]
}
'

// 確認

curl -XGET 'http://192.168.33.19:9200/_count?pretty' -d '
{
    "query": {
        "match_all": {}
    }
}
'

{
  "count" : 3,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  }
}

Search Lite

簡単な検索の学習。まずは「単純検索」


// ブラウザ
http://192.168.33.19:9200/megacorp/employee/_search

{"took":22,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":3,"max_score":1.0,"hits":[{"_index":"megacorp","_type":"employee","_id":"1","_score":1.0,"_source":
{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}
},{"_index":"megacorp","_type":"employee","_id":"2","_score":1.0,"_source":
{
    "first_name" :  "Jane",
    "last_name" :   "Smith",
    "age" :         32,
    "about" :       "I like to collect rock albums",
    "interests":  [ "music" ]
}
},{"_index":"megacorp","_type":"employee","_id":"3","_score":1.0,"_source":
{
    "first_name" :  "Douglas",
    "last_name" :   "Fir",
    "age" :         35,
    "about":        "I like to build cabinets",
    "interests":  [ "forestry" ]
}
}]}}

「条件を付加して検索」


// ブラウザ
http://192.168.33.19:9200/megacorp/employee/_search?q=last_name:Smith

{"took":22,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":2,"max_score":0.30685282,"hits":[{"_index":"megacorp","_type":"employee","_id":"1","_score":0.30685282,"_source":
{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}
},{"_index":"megacorp","_type":"employee","_id":"2","_score":0.30685282,"_source":
{
    "first_name" :  "Jane",
    "last_name" :   "Smith",
    "age" :         32,
    "about" :       "I like to collect rock albums",
    "interests":  [ "music" ]
}
}]}}

長くなるので分割。
次はSearch with Query DSLからです。
どこまできちんとメモするか微妙です。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...