この記事は公開されてから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を使えるようになるため、まずは簡単にさわってみることからはじめました。
これでひととおりドキュメントの作成から検索・削除までを試せます。