初心者のためのElasticsearchその1
はじめに
本稿では、とりあえずElasticsearchとkibanaをインストール後、
基本的なAPIをつかって動かしてみます。
Elasticsearchとは
- Elastic社が開発している、LuceneベースでOSSの全文検索エンジン
- RESTでアクセス可能。最近SQLも使えるようになった
- 検索エンジン界隈では一番人気(らしい)
kibanaとは
- kibana(キバナ)はElasticsearchのデータを分析・可視化するツール
- kibanaのDevtoolsを使うとElasticsearchのクエリを書くのが少し楽になる
環境
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.12.4
- Java : 1.8.0_121
Elasticsearch+Kibanaインストール
Homebrenwでもインストールできるし、
1 | % brew install elasticsearch |
ここからダウンロードしてもOKです。 ファイル解凍後に下記コマンド実行でElasticsearchが起動します。
1 2 | % cd <path/your/es-dir>% bin/elasticsearch |
Elasticsearchが起動したら下記コマンドで動作確認しましょう。
デフォルトでは9200番ポートで起動します。
起動確認はcurlコマンドで↓のようにすればOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | % curl http://localhost:9200/{ "name" : "xxxxx", "cluster_name" : "docker-cluster", "cluster_uuid" : "doVrO4p7TKycE72FSDS-LA", "version" : { "number" : "6.3.0", "build_hash" : "c58ff00", "build_date" : "2018-03-13T10:06:29.741383Z", "build_snapshot" : false ・・・ }, "tagline" : "You Know, for Search"} |
次にkibanaのセットアップをします。
ここからダウンロードして起動します。
1 2 3 4 5 | % cd <path/your/kibana-dir>% ./bin/kibana・・log [07:24:19.516] [info][listening] Server running at http://localhost:5601 |
デフォルトでは9200番ポートで起動しているESに接続し、5601番ポートで起動します。
\もしESが9200番ポート以外で起動している場合、
config/kibana.ymlを編集して適切なエンドポイントを指定しましょう。
kibanaが起動したら、ブラウザでkibanaのDevToolsを開きます。
http://localhost:5601/app/kibana#/dev_tools/console
このツールは左のペインにESへのリクエストを記述し、レスポンスが右のペインに表示されます。
用語
最低限知っておくべきES用語の説明を簡単に。
- index
データの保管場所で、RDBMSにおけるdatabaseに相当するものです。
typeを定義するためのmappingを1つ以上持てる。 -
type index内に定義可能。RDBMSにおけるテーブルみたいなものです。
-
field データフィールド。RDBMSにおけるカラムです。
-
document データ本体。RDBMSにおけるレコードです。
-
mapping
indexでdocumentをどのようなfiled/データ型で登録しておくのかを定義するのが mappingになります。
デフォルトでは最初にdocumentを登録した際、自動でfieldの型が判断され、indexが作成されます。
※事前にindexのmapping情報を定義しておくことも可能
Elasticsearchのコマンドを実行してみる
kibanaのDev toolsを使って基本的なREST APIを実行してみましょう。
まずはデータの登録をしてみます。
1 2 3 4 5 6 7 8 9 10 11 12 | # Dev ToolsのコンソールPUT myes/book/b001{ "title" : "hello java", "description" : "java book", "author" : { "name":"taro", "age":30 }, "price": 1000} |
b001というIDで登録しています。
なお、POST myes/bookとして実行するとIDが自動で採番されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | { "_index": "myes", "_type": "book", "_id": "b001", "_version": 1, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 1, "_primary_term": 1} |
デフォルトではデータ登録時に自動的にmappingされます。
再度下記のようにPUTを実行すると、データの更新となります。
1 2 3 4 5 6 7 8 9 10 | PUT myes/book/b001{ "title" : "hello java upate", "description" : "java book update", "author" : { "name":"taro", "age":30 }, "price": 2000} |
/<index名>/_mappingsとすればindexのmapping情報が取得できます。
1 | GET myes/_mappings |
登録したデータから自動的に型が決まっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | { "myes": { "mappings": { "book": { "properties": { "author": { "properties": { "age": { "type": "long" }, "name": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } }, "description": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "price": { "type": "long" }, "title": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } } } }} |
また、_cat/indiciesを使うとindex一覧を表示できます。
1 | GET /_cat/indices |
HEADをつかえばdocumentの存在確認が可能です。
documetがあれば200、なけれ404がかえってきます。
1 | HEAD /myes/book/b001 |
DELETEメソッドをつかえばドキュメントの削除ができます。
1 | DELETE myes/book/b002 |
1 2 3 4 5 6 7 8 9 | { "_index": "myes", "_type": "book", "_id": "b002", "_version": 3, "result": "deleted", ・ ・} |
ドキュメントの取得はGETメソッドでキーを指定することで行います。
1 | GET myes/book/b001 |
また、最も使用するであろう検索はGETメソッドで検索条件を指定すれば可能です。
1 2 3 4 5 6 7 8 | GET myes/book/_search { "query": { "term": { "title": "hello" } }} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | { "took": 3, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 2, "max_score": 0.2876821, "hits": [ { "_index": "myes", "_type": "book", "_id": "b001", "_score": 0.2876821, "_source": { "title": "hello java", "description": "java book", "author": { "name": "taro", "age": 30 }, "price": 1000 } } ] }} |
indexを自分で作成したい場合、PUTメソッドで mappingも指定しつつ定義可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 | PUT static_index{ "settings" : { "number_of_shards" : 1 }, "mappings" : { "type1" : { "properties" : { "field1" : { "type" : "text" } } } }} |
削除するときはDELETEメソッドで行います。
1 | DELETE /static_index |
まとめ
Elasticsearchを使えるようになるため、まずは簡単にさわってみることからはじめました。
これでひととおりドキュメントの作成から検索・削除までを試せます。