【Kibana】コンソールからクエリでElasticsearchを操作する

Elasticsearchのデータには様々な方法でアクセスできますが、今回はKibanaの画面からアクセスする方法を紹介します。

Kibanaには「開発ツール」という機能があり、そこでクエリ(APIs)を実行することで様々な操作を行うことができます。可能な主な操作は以下の通りです。

  • インデックスの作成(マッピング等詳細設定含む)
  • データの追加、削除
  • インデックスの削除
  • データの検索

クエリと聞くとなんだか難しそうな感じもしますが、特徴を押さえればその書き方は数パターンです。

今回は、上記に挙げた基本的な操作のクエリを紹介していきます。

開発ツールの開き方

開発ツールは、Kibanaのホーム画面の「開発ツール」から開くことができます。

ホームから開発ツールが開ける

または、メニューバーの下部からも開くことができます。

メニューバーの下部からも開ける

以下のような「開発ツール」の「コンソール」でクエリを記述していきます。

開発ツールのコンソール

クエリ

インデックスの作成

データをelasticsearchに投入すれば、それに合わせてインデックスも自動で作成してくれますが、手動で各種設定を加味したインデックスを作成することもできます。

ベース

PUTメソッドを用いて作成します。

PUT sample_index
{
}

上記クエリを実行すると、sample_indexという空のインデックスが作成されます。

インデックスの設定

空のインデックスでは意味がないので、設定を追加していきます。

設定では、インデックスのシャードの数やレプリカの数を指定できます。また、kuromojiなどプラグイン利用の設定等もすることができます。

PUT sample_index
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}

マッピング

続いて、マッピングの設定を行います。通常、マッピングは自動で行われますが、型を指定したい場合はあらかじめインデックス作成時に明示的に指定します。

"mappings": {
    "properties": {
      "field1": { "type": "text" }
    }
  }

全体像

クエリ全体は以下のようになります。

PUT sample_index
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  },
  "mappings": {
    "properties": {
      "field1": { "type": "text" }
    }
  }
}

空のインデックスが作成されました。

さらに詳しい情報は以下にあります(英語なんですが、、)

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices.html

ドキュメントの追加

続いて、作成したインデックスにドキュメントを追加していきます。以下では、4件のドキュメントを追加します。

POST _bulk
{"index": {"_index": "sample_index", "_id": 1}}
{"field1": "インデックスにデータ追加"}
{"index": {"_index": "sample_index", "_id": 2}}
{"field1": "Elastic"}
{"index": {"_index": "sample_index", "_id": 3}}
{"field1": "Kibana"}
{"index": {"_index": "sample_index", "_id": 4}}
{"field1": "Logstash"}

このとき、必ずインデックス作成時に指定したマッピングと一致している必要はありません。一致するフィールドは、それに合わせてマッピングされますが、一致しないものについては自動で型を認識しマッピングに追加されます。

Discoverで確認すると、ドキュメントが4件登録されていることがわかります。

ドキュメントの更新

続いて、ドキュメントを更新します。更新したいドキュメントはidで指定します。

idが4のドキュメントを更新します。

   #インデックス名/_update/id
POST sample_index/_update/4
{
  "doc":{
    "field1": "更新しました"
  }
}

結果を見てみます。

id=4のドキュメントの”field1″が更新されました。

ドキュメントの削除

指定したドキュメントを削除します。ドキュメントの削除も、更新同様idを指定して行います。

       #/インデックス名/_doc/id 
DELETE /sample_index/_doc/1

たった1行で完結してしまいます。

id=1のドキュメントが削除されています。

インデックスの削除

続いてはインデックスを削除します。ドキュメント削除と同じような方法で削除ができます。

DELETE /sample_index

先ほどはドキュメントのidまで指定しましたが、インデックスを削除するときは、インデックス名を指定するだけです。

実際にインデックスが削除されたか確認します。インデックスの存在確認は以下のようにします。

HEAD sample_index

存在しないと返されました。なので、インデックスが削除されたと判断できます。

インデックス内の検索

最後に、インデックス内のドキュメントの検索方法を簡単に紹介します。

全件検索は以下のように記述します。

GET /sample_index/_search

このように、ドキュメントが1件ずつ表示されます。

指定の単語を含むドキュメントを検索

指定した単語を含むドキュメントを検索するには、matchクエリを用います。

今回は、”field1″に”Kibana”を含むドキュメントを検索します。

GET /sample_index/_search
{
  "query": {
    "match": {
      "field1": "Kibana"
    }
  }
}

検索結果に”_score”が表示されますが、これは検索キーワードと検索結果の関連性を示しています。つまり、スコアが高いほど検索条件に一致しているといえます。

まとめ

Kibanaの開発ツールからElasticsearchを操作する方法を紹介しました。基本的な操作は、思ったよりも簡単だったのではないでしょうか?もっともっと細かい指定をしてクエリを実行することもできます。

必要に応じて使っていってください^^

ではでは👋