【検索システム】Elasticsearch に投入したデータをGUIでサクッと確認する【Kibana】

# はじめに

みなさん検索システム作ってますか？

Elasticsearch で検索システムを作る際、Elasticsearch に投入したデータの中身を確認したくなること、ありますよね？？

- Elasticsearch へデータを送信するシステムが正常に動作しているか確認したい！
- 検索オプションを実装したけど、0件しかヒットしなかった！あれ？該当するデータ入れたっけ？
- などなど...

そんなとき、`curl` コマンドで `match_all` クエリを投げて調査することも可能ですが、GUI でサクッと確認したいですよね？というわけで、本記事では Elasticsearch に投入したデータを Kibana でサクッと確認する方法を紹介します。

最終的に、以下のように Elasticsearch 内のデータが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/c50f1992-da34-e0b1-7fa9-3755cd64d450.png)

# Elasticsearch に投入したデータを Kibana でサクッと確認する

以下の環境で動作確認しました。

- Ubuntu 20.04
- Elasticsearch 7.10.2
- Kibana 7.10.2

はじめにサンプルデータを投入した Elasticsearch のサーバーを準備する方法を紹介し、次に Kibana でデータをサクッと確認する方法を紹介します。

## サンプルデータを投入した Elasticsearch のサーバーを準備する

:::note
すでにデータ投入済みの Elasticsearch のサーバーがある場合はこの節はスキップし、「Kibana でデータをサクッと確認する」に進んでOKです！
:::

はじめに Elasticsearch をダウンロードします。公式ドキュメントに記載されている方法を参考にしました。

https://www.elastic.co/guide/en/elastic-stack-get-started/7.10/get-started-elastic-stack.html

以下コマンドでダウンロード & 展開 & 起動します。

```bash
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-linux-x86_64.tar.gz
tar -xzvf elasticsearch-7.10.2-linux-x86_64.tar.gz
cd elasticsearch-7.10.2
./bin/elasticsearch
```

起動できたら、以下のように確認してみましょう。

```json
$ curl http://localhost:9200/
{
  "name" : "XXXXXXXXXXXX",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "PREUZaNLQeWk7XBeFHt39Q",
  "version" : {
    "number" : "7.10.2",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",
    "build_date" : "2021-01-13T00:42:12.435326Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
```

次はサンプルデータを投入します。以下ドキュメントのサンプルデータを投入する方法を参考にしました。

https://www.elastic.co/guide/en/kibana/7.1/tutorial-load-dataset.html

以下で Elasticsearch 用のシェイクスピアのサンプルデータが取得できます。

```bash
$ curl -O https://download.elastic.co/demos/kibana/gettingstarted/7.x/shakespeare.json
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 24.1M  100 24.1M    0     0  8333k      0  0:00:02  0:00:02 --:--:-- 8330k
$ ls
shakespeare.json
```

データを登録するために、マッピングを作成しましょう。

```bash
curl -X PUT "localhost:9200/shakespeare?pretty" -H 'Content-Type: application/json' -d'
{
  "mappings": {
    "properties": {
    "speaker": {"type": "keyword"},
    "play_name": {"type": "keyword"},
    "line_id": {"type": "integer"},
    "speech_number": {"type": "integer"}
    }
  }
}
'
```

そして、以下コマンドでデータを投入します。

```bash
curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/shakespeare/_bulk?pretty' --data-binary @shakespeare.json
```

以下コマンドでインデックスを確認すると、111,396 件登録できたようです。

```bash
$ curl -XGET 'localhost:9200/_cat/indices?v'
health status index       uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   shakespeare oZy1_qOsSpuEIe9jEjE6pg   1   1     111396            0     18.1mb         18.1mb
```

これで Elasticsearch へのデータの投入が完了し、準備が整いました。

## Kibana でデータをサクッと確認する

Kibana をインストールします。以下ドキュメントを参考にしました。

https://www.elastic.co/guide/en/kibana/7.10/targz.html

```
curl -O https://artifacts.elastic.co/downloads/kibana/kibana-7.10.2-linux-x86_64.tar.gz
curl https://artifacts.elastic.co/downloads/kibana/kibana-7.10.2-linux-x86_64.tar.gz.sha512 | shasum -a 512 -c - 
tar -xzf kibana-7.10.2-linux-x86_64.tar.gz
cd kibana-7.10.2-linux-x86_64/
./bin/kibana
```

ブラウザで http://localhost:5601 にアクセスし、起動できているか確認します。以下ように表示されていればOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/4e4d07cb-8236-bf71-5305-8edc68c73d2f.png)

「Exprole on my own」 をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/af499303-6b61-9fe3-784a-fd26b8abaed3.png)

Elasticsearch のデータを確認するための設定をしていきます。
右上の「Manage」を開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/75efb687-575d-d5e9-0456-09a81237790a.png)

左サイドバーの下の方にある 「Index Patterns」 を開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/401faa11-cc8b-36f7-d717-2d258866acc6.png)

ここで、Elasticsearch のインデックスの設定をしていきます。
「index pattern name」 にインデックス名(サンプルデータの場合は `shakespeare`)を入れて、「Next step」 をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/9e3e67a2-3744-a140-2896-ee776c246816.png)

次に時間に関するフィールドを選択します。サンプルデータを使う場合は時間に関するフィールドがないので、そのまま「Create index pattern」 でOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/1fdc0d5a-6b77-f45f-2a23-e35b1edf45ba.png)

これでインデックスの設定が完了したので、早速 Elasticsearch の中身を見ていきましょう。

左上のハンバーガーアイコンからメニューを開き、「Kibana > Discover」を開きます。
すると、以下の画面のように、Elasticsearch の中身が確認できます！！

また、丈夫の入力フォームに Kibana Query Language (KQL) を入力することで、絞り込みも可能です。

（Kibana でインデックスの設定を行った際に時間のフィールドを設定した場合、直近に登録したデータしか表示されない場合があります。その場合はKQLから条件を変更すると、他のデータも見れるようになります。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/c50f1992-da34-e0b1-7fa9-3755cd64d450.png)

Kibana は他にもデータを確認するための便利な機能がたくさんあります。例として以下のようなワードクラウドが表示できます。（Visalizer から Tag Cloud を選択すると表示できます。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/ccc9ee26-2e57-512f-c111-bdeb05e29606.png)

もう一つ紹介しておきたい機能として、Dev Tools では. クエリの編集と実行ができます。便利ですね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/33692e90-d776-201c-c9ef-afa1b5eae1e4.png)

# おわりに

Kibana には今回紹介した機能以外にも、たくさんの機能があり、僕自身まだ全然使い切れていないです。

Elasticsearch を使っているなら Kibana は相性がとてもいいので、組み合わせて使うのがおすすめです！