Elasticsearchを勉強しようと思ったときに見たサイトとメモ

私は普段、フロントエンドをメインに、どちらかというとそこからPMやデザイン方面に担当することが多かったのですが、
バックエンドやインフラも結構わかる人にならなければならなくなったので、まずは今開発しているサービスで使っているElasticsearchを勉強することにしました。
その時のメモみたいなものです。

もともと私が知っているElasticsearchの知識は、全文検索のシステムである、くらいでした。

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

## 「ElasticSearch 入門」で検索してみた

https://future-architect.github.io/articles/20200623/

こちらが一番上にヒットしました。

### このサイトで知ったこと

Elasticsearchの用語をRDSなどで使う用語に当てはめてみるとこんな感じ！

|Elasticsearch|RDS|
|---|---|
|インデックス|データベース|
|ドキュメントタイプ・マッピング|テーブル|
|ドキュメント|レコード|
|フィールド|カラム|

なるほど！わかりやすい！
Firestoreと似ていると思いました。

他には、Elasticsearchとは何でどんなメリットがあるかや、インストール方法、データの登録や検索方法などがまとめられており、
最初に概要を知るにはとても良いサイトでした。

## 次に、もうちょっと詳しく書いていそうなところ

https://dev.classmethod.jp/referencecat/enter-elasticsearch/

すぐにちょうど良さそうなサイトを見つけました。
少し読んだところで、わかりやすそうと感じそのまま最後まで読みましたが、その後いろいろ見ていたサイトからも参考サイトとしてリンクが貼られていたので、良いのだと思います。
記事の日付が2016年と少し古いですが、大枠は変わらないのかな？と思い読みました。

### このサイトで知ったこと
#### 第１回 Elastisearch 入門 インデックスを設計する際に知っておくべき事
* Elasticsearchで設計するときに気をつけることや考慮すべきこと
* Indexは、複数のShardsから構成されている
* `"product*"`や`"*ja"`のように指定することができる

#### 第２回 Elasticsearch 入門 データスキーマ設計のいろは
* 「ドキュメント指向型」と呼ばれるやつがとても画期的らしい
* ドキュメントはFirestoreのドキュメントと似ている

#### 第３回 Elasticsearch 入門 ドキュメント管理は意外と高度なことができる
* ドキュメントの追加・参照・更新・削除について
* インデックスされているドキュメントを一意に識別することができるのはドキュメントのIDのみで、それは任意なものでも自動生成でもできる（Firestoreと似ている）
* アクセス数などをカウントアップしたいときなどは、`script`を使う

#### 第４回 Elasticsearch 入門 検索の基本中の基本
* 検索の仕方について

#### 第５回 Elasticsearch 入門 Elasticsearch の使いどころ
* ShardsはNodeに配置されて、Nodeの集合をClusterという
* 超大規模なシステムも構成可能
* 柔軟にいろいろな複雑なことができる

#### 第６回 Elasticsearch 入門 基本コンセプトを理解する
* Cluster、Node、Shardsについて　これらの構造により、パフォーマンスを分散できる
* Primary Shard（書き込み可能）とReplica Shard（読み取り専用）があり、同じNodeには配置されない
* Indexは論理的な概念、Shardは物理的な概念

#### 第７回 Elasticsearch 入門 API の使い方をハンズオンで理解する 〜前編〜
* Elasticsearch の起動・停止〜ドキュメントの管理（追加・登録・削除）
* デフォルトはNodeの名前はランダムに設定され、Clusterの名前はelasticsearchになっている　任意のものを指定することも可能
* Cluster、Node、Index、Shardsの状態の確認方法
* 最初healthがyellowになっていて、Replica Shardsの数を変更するとgreenになったのをみて、第６回の`同じNodeには配置されない`の部分を理解

#### 第８回 Elasticsearch 入門 API の使い方をハンズオンで理解する 〜後編〜
* Mappingについて
* 検索の仕方とレスポンスの見方
* QueryとFilterの違い
* 検索条件をテンプレート化して再利用することができる


## Elasticsearchの新しいバージョンは結構変わっていることがわかり、バージョン7のものを中心に色々読んだ

https://qiita.com/r4-keisuke/items/65e5f434652e5e32b6c0

最初の記事も読みなおしたり、こちらなど

https://hogetech.info/2020/11/22/elasticsearch-（分散型全文検索エンジン）入門/

https://qiita.com/nskydiving/items/1c2dc4e0b9c98d164329

### このあたりで知ったこと
* 2系から5系のアップデートは、Elasticsearchが2系のときに、Elastic StackのKibanaやLogstashとバージョンを合わせるため、一気にすべてが5系に上がったらしい
* バージョン6以降では、「Type」の指定が非推奨となり、タイプ名の代わりに「_doc」を指定するようになった
* ノードには４種類の属性が存在し、１つのノードが複数の属性を持つことも可能（Masterノード、Dataノード、Ingestノード、Coordinatingノード）
* ドキュメントを正しく検索するため、Analyzerを使用して単語に分割する必要がある
* ElasticsearchのデフォルトのStandard analyzerは日本語に対応していないので、kuromoji Analysis Pluginと呼ばれる日本語形態素解析用のプラグインを使用する


## 手をうごかしてみる

### インストールと簡単な操作をしてみる

公式ドキュメント

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

他には前述のサイトなどを参考にした

Kibanaも入れてみようとしましたが、どのやり方でやってもうまくいかなかったのと、会社の環境では使っていないので諦めた・・・

### 会社で使っているelasticsearch-headを触ってみた
Google Chromeの拡張機能です。

https://chrome.google.com/webstore/detail/elasticsearch-head/ffmkiejjmecolpfloofpjologoblkegm



## 最後に
ドキュメント形式になっている部分は、Firestoreと似ていたので、すんなりと理解できました。
あとは色々使ってみて理解を深めていこうと思います。

色々調べていて感じたのは、最近の記事があまりなかったような気がします。
英語はたくさんあるのかもしれませんが・・・
最近はこの辺り日本では流行っていないのかなー？
私の調べ方が良くないだけかもしれませんが、、