Elasticsearchとは何か？

# はじめに
最近実務でElasticsearchを触る機会があり、0から勉強しました。

本稿では、初学者向けに「Elasticsearchとは何か？」というテーマでお伝えしていきます。

知識だけではなく、後半では実際にElasticsearchとKibanaをインストールして動かしています。

公式ドキュメントはこちら。

https://www.elastic.co/jp/

まずは知識をつけていきましょう。

## Elasticsearchとは何か？
Elasticsearchは、分散型で無料かつオープンな検索・分析エンジンです。

https://www.elastic.co/jp/what-is/elasticsearch

Elastic社が運営するサービス群（Elastic Stack）の1つです。

## Elasticsearchの利点は？
Elasticsearchには、下記のような利点があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/1194346a-8066-cdd1-2922-c2359c5d8a1d.png "ElasticSearchの利点")

https://aws.amazon.com/jp/opensearch-service/the-elk-stack/what-is-elasticsearch/

JSONベースでAPIによってデータを扱えるので、開発もしやすそうですね。

これで **無料** とは驚きです！

## Elasticsearchのデータ構造は？
イメージとしては下記の図のようになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/7c90c02e-8dec-1bf4-a5b9-2092186c36f8.png)

Elasticsearchは受け取ったJSONデータを**ドキュメント**として格納します。

ドキュメントを相互に関連づけることで**Elasticsearchインデックス**を作成します。

**Elasticsearchインデックス**とは、相互に関連付けられたドキュメントの集合です。

ドキュメントのフィールドは**Mapping**と呼ばれます。

Elasticsearchでは**倒置インデックス**と呼ばれるデータ構造が使用されています。

この倒置インデックスは、あらゆるドキュメントに出現する一意の単語をすべてリスト化することで、その単語が存在するドキュメントをすべて特定することができます。

RDBと用語を対応させると、以下の表のようになります。
|Elasticsearch|RDB|
|---|---|
|Elasticsearchインデックス | DB|
|Mapping|テーブル|
|ドキュメント| レコード|

一文にまとめると、下記の通りです。

:::note info
Elasticsearchは**Elasticsearchインデックス**を通じて**Mapping**ごとに分けて**ドキュメント**を格納し、**倒置インデックス**を構築して、ドキュメントのデータをほぼリアルタイムに検索できます。
:::

----

ここからは、実際にインストールした際の様子をお伝えします。

参考リンク
https://dev.classmethod.jp/articles/elasticsearch-starter-1/#toc-8
## Elasticsearch, Kibanaのインストール
### 1. ダウンロード
#### Elasticsearch
ダウンロードリンクから、Zipファイルをダウンロード。
https://www.elastic.co/jp/downloads/elasticsearch

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/d6a9d00a-1dd3-0905-9d5f-6f13942086fa.png)
今回はM1 Mac上でインストールを行います。

加えて、今回はブラウザ上でElasticsearchを操作できる「**Kibana**」というツールも同時にインストールします。

#### Kibana
ダウンロードリンクから、Zipファイルをダウンロード。
https://www.elastic.co/jp/downloads/kibana
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/68a8ec7f-44ec-0527-d89a-323aa994def5.png)

### 2. 解凍
Zipファイルをダウンロードしたディレクトリへ移動し、下記コマンドで解凍します。
```sh
% tar xvzf elasticsearch-8.1.0-darwin-aarch64.tar
% tar xvzf kibana-8.1.0-darwin-aarch64.tar
```

### 3. Elasticsearch起動
解凍後のディレクトリへ移動し、起動コマンドを実行します。
```sh
% cd elasticsearch-8.1.0
% ./bin/elasticsearch
```
このような表示が出ればOKです！
```terminal
[2022-03-19T17:58:42,927][INFO ][o.e.i.g.GeoIpDownloader  ] [MacBook.local] successfully downloaded geoip database [GeoLite2-City.mmdb]
[2022-03-19T17:58:44,342][INFO ][o.e.i.g.GeoIpDownloader  ] [MacBook.local] successfully downloaded geoip database [GeoLite2-Country.mmdb]
[2022-03-19T17:58:44,408][INFO ][o.e.i.g.DatabaseNodeService] [MacBook.local] successfully loaded geoip database file [GeoLite2-Country.mmdb]
[2022-03-19T17:58:44,543][INFO ][o.e.i.g.DatabaseNodeService] [MacBook.local] successfully loaded geoip database file [GeoLite2-City.mmdb]
```

この時、ターミナル上に認証情報が表示されているはずです。

この認証情報は後々使用しますので、エディタなどに控えておくかターミナルを開きっぱなしにしておきましょう。

```terminal
ℹ️  Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
  XXXXXXXXXXX（elasticユーザーのパスワード。5.で使用します。）

ℹ️  Configure Kibana to use this cluster:
• Run Kibana and click the configuration link in the terminal when Kibana starts.
• Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
  XXXXXXXXXXX（トークン。5.で使用します。）
```

### 4. Kibana起動

※ここはターミナルの別タブ上で作業することをおすすめします。

解凍後のディレクトリへ移動し、起動コマンドを実行します。
```sh
% cd cd kibana-8.1.0
% ./bin/kibana
```
おっと、起動できなかったです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/5a43eb01-6f47-936b-f36a-572e732f9680.png)

こういう時は、左上の:apple:マークから許可設定してあげましょう。
:apple:→システム環境設定→セキュリティとプライバシー

「このまま許可」ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/a2d9653b-4099-2a12-5ead-d2956bbec596.png)

再度起動コマンドを実行します。
```sh
% ./bin/kibana
```


「悪質なソフトウェアかどうかを〜」と表示されても気にせず「開く」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/248e6c34-0d14-a143-1751-fb42d11e17b3.png)

今度は「re2.node」が起動できなかったようです。また「このまま許可」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/477c3f3a-25ee-436c-bf69-4c27b8714a06.png)

下記のようなメッセージが表示されればOKです！
```terminal
Go to http://localhost:5601/?code=202697 to get started.
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/a24d0fc3-19ad-a0bd-75fc-2bddecc51806.png)

### 5. ブラウザからアクセス
では、ブラウザを立ち上げ、4.で表示されたURLにアクセスしてみましょう。

今回は下記URLです。
`http://localhost:5601/?code=202697`

Kibanaの初期画面が表示されました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/1b660e12-e760-2634-bb3f-c50104319836.png)

トークンは3.のターミナル上に表示されていますので、入力して「Configure Elastic」をクリックします。

すると、ログイン画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/2ad26638-b536-fff8-7bd0-441312b4a4f4.png)

Usernameは`elastic`、Passwordは3.で表示されたパスワードを入力します。

ログインできました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/afe57dba-ac2e-f951-67d3-108532d663dd.png)


今回は「Explore on my own」をクリックします。

Home画面が表示されました！かっこいい！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/9f80fd07-388e-d4e1-751b-7ff788cac7d3.png)

では、実際にクエリを実行してみましょう。

左上のメニューから、「Dev Tools」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/954fcdeb-bc0a-7894-e57c-47ea163e0445.png)

すると、コンソールが表示されます。

左の入力画面にカーソルを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/1cc56b9a-b06c-dc56-014a-73f250379028.png)

⌘ + エンターキー、または右上の「▶︎」をクリックすると……？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/71c3d547-c0a6-94b7-1112-8227f8248843.png)


右側にクエリ実行結果が表示されました:v:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/162be955-733e-1c92-bff7-db553e0d8ce3.png)
![cca74b4f2dd0cb26ad86a5756421e9ca.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238817/81ffb505-4721-0243-2d47-4d503862543e.gif)


正常に動作していますね！

以上でインストールは終了です。

この後は、データを入れたり取り出したりして遊んでみようと思います！

# おわりに

今回は「Elasticsearchとは何か？」というテーマで、実際にインストールして動かすところまでやってみました。

参考になれば幸いです！