初心者のための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でもインストールできるし、
% brew install elasticsearch
ここからダウンロードしてもOKです。 ファイル解凍後に下記コマンド実行でElasticsearchが起動します。
% cd <path/your/es-dir> % bin/elasticsearch
Elasticsearchが起動したら下記コマンドで動作確認しましょう。
デフォルトでは9200番ポートで起動します。
起動確認はcurlコマンドで↓のようにすればOKです。
% 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のセットアップをします。
ここからダウンロードして起動します。
% 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を実行してみましょう。
まずはデータの登録をしてみます。
# 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が自動で採番されます。
{ "_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を実行すると、データの更新となります。
PUT myes/book/b001 { "title" : "hello java upate", "description" : "java book update", "author" : { "name":"taro", "age":30 }, "price": 2000 }
/<index名>/_mappingsとすればindexのmapping情報が取得できます。
GET myes/_mappings
登録したデータから自動的に型が決まっています。
{ "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一覧を表示できます。
GET /_cat/indices
HEADをつかえばdocumentの存在確認が可能です。
documetがあれば200、なければ404が返ってきます。
HEAD /myes/book/b001
DELETEメソッドをつかえばドキュメントの削除ができます。
DELETE myes/book/b002
{ "_index": "myes", "_type": "book", "_id": "b002", "_version": 3, "result": "deleted", ・ ・ }
ドキュメントの取得はGETメソッドでキーを指定することで行います。
GET myes/book/b001
また、最も使用するであろう検索はGETメソッドで検索条件を指定すれば可能です。
GET myes/book/_search { "query": { "term": { "title": "hello" } } }
{ "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も指定しつつ定義可能です。
PUT static_index { "settings" : { "number_of_shards" : 1 }, "mappings" : { "type1" : { "properties" : { "field1" : { "type" : "text" } } } } }
削除するときはDELETEメソッドで行います。
DELETE /static_index
まとめ
Elasticsearchを使えるようになるため、まずは簡単にさわってみることからはじめました。
これでひととおりドキュメントの作成から検索・削除までを試せます。