Elasticsearchざっくり入門してみる
参考資料
Elasticseachとは
restful
json
分散型
全文検索エンジン
Elastic Stackというプロダクト群の一部
Kibana
Elasticsearchに登録されたデータの検索,可視化,分析を行うためのUIを提供するWebアプリケーション
ローカルでElasticseachとkibana立てたりすると簡単に検証、レスポンスの確認などできる
データと用語について
ElasticsearchではデータをJSONで扱い、そのデータをdocumentという
保存先はindexで、indexにdocumentを登録することを「indexing、indexする」という
RDBで置き換えるとこんな感じ
index : DB
field : カラム
document : レコード
mapping : スキーマ定義
検索する際も条件を選択してqueryを投げることができる
bulkrequest用のAPIも用意されていて大規模データを想定している
.hits.hits._score
類似度度合いの数値
.hits.max_score にはヒットしたドキュメントの中で最大のスコアが入る
類似度の計算にBM25というアルゴリズムを使用している
転値インデックス
出現する単語を索引のようにすること
単語とそれが含まれるドキュメントの紐付けをする
Analyzerで転値インデックス前に処理を仕込むことができる
日本語だと色々めんどいのでfilterを色々かます必要がある(?)
Character Filter → Tokenizer → Token Filter
マッピングはドキュメントのスキーマ定義
構成
Cluster
1台以上のNodeで構成されたもの
かたまりとしてリクエストを処理する
Node
ElasticsearchのインスタンスでJVM上で動く1プロセス
Master Node
Cluster上に1台しか存在しない全体管理用のNode
どのShardがどのNodeに存在するか、インデックスの生成・削除、どのNodeがClusterに属しているか等を管理
「投票」という仕組みで選出される
障害などでも自動復旧する
Data Node
データを保持し、CRUD、検索、集計などのデータ操作処理を行う
Ingest Node
ドキュメントのIndex直前に前処理を行う
DBのスキーマにはないが検索用のフィールドを追加したい、あるフィールドの文字数を保持したい等、事前に様々な処理を行うことができる
Coordinating Node
リクエストを受け取るNode
基本的に全てが対応するので、roleを指定しなくてもできる
Shard
Data Node内の実際にデータを保持・管理する箇所
Indexを作成した場合、Shardに分散されて登録される