最近、Elasticsearch サービスに関する話をよく聞きます。興味もあったので、ちょっと調べ、軽く試してみました。これはそのメモです。
Elasticsearch とは
Elasticsearch は OSS の、Lucene 基盤の分散処理マルチテナント対応検索エンジン、だそうです。全文検索に特化しているとか。以下が理解の参考になりました。
- 3分で分かった気になる、Elasticsearchとは?
- 全文検索エンジン「Elasticsearch」を調べて使ってみた色々まとめ
- Elasticsearchって?
- はじめての Elasticsearch
- 初心者のためのRest APIから覚えるElasticsearch
個人的な第一印象は、テキスト検索が得意な Document DB、に見せかけて中身は形態素解析してるゴリゴリの分散 RDB ではないか、という感じです。外してそうな気もしますがw
さて、実際に試してみましょう!
IBM Cloud で無料 k8s クラスターを使う
Elasticsearch は各社で様々なサービスを提供していますし、それらを利用した マネージドサービス もあるようです。でも今回はお試しなので、手元にある k8s 環境で実行してみましょう。
個人的には IBM Cloud が提供する IKS (IBM Cloud Kubernetes Service) の 30日間 無料クラスター を愛用しています。クレジットカードを登録して 従量課金, PAYG アカウント にしないと使えないのですが、他に有料サービスを使わないならば請求はありません。30日後に自動削除されるので、消し忘れても安心。
IBM さん太っ腹で、この30日間 無料って何度でも使えるのです(注: 2020年6月現在)。なので使い終わったら削除して、次回また新規作成すればok。つまり使い捨てで、お掃除する必要もない、お試しには最適な環境なのです。ただしクラスターの新規作成には 30~60分ほどかかるので、そこだけ注意が必要。
更にクラスターには「Web端末」機能があります。
ibmcloud や kubectl など必要な CLI ツールが導入されたシェル環境を、Webブラウザから利用できます。自分のマシンへのインストール不要で試せるのが嬉しいところ。
Elasticsearch 環境のセットアップ
さて、k8s 環境が使えるようになったところで、k8s 上に ElasticSearch7.1 クラスタを構築してみた ページを参考に docker ベースで Deployment しましょう。
kubectl run elasticsearch \
--image=docker.elastic.co/elasticsearch/elasticsearch:7.1.1 \
--env="discovery.type=single-node" --port=9200
Deployment、ReplicaSet、Pod が作成されているのを確認します。
このままでもローカルに試せるのですが、せっかくですから NodePort Service を作成して、インターネット経由でアクセス可能にしましょう。
kubectl expose deployment elasticsearch --type="NodePort" --port=9200
kubectl get all
ibmcloud ks worker ls --cluster mycluster
表示された情報から、Public IP と外部に公開されたポート番号を入手します。最後の Public IP の確認方法は k8s 環境によって違う(今回は IBM Cloud の例)ので、適時確認してください。
ローカルPCの curl コマンドでインターネット経由のアクセスができることを確認しておきましょう。
Postman で試す
curl だといろいろ面倒なので、ここからは Postman で API を叩きたいとおもいます。まずは先ほどと同じ URL で、ヘルスチェックを実施。
_search
で現在の中身が空であることを確認しておきます。
ドキュメントを作成する
さて、 はじめての Elasticsearch にある手順を試していきましょう。まずは _id を指定したドキュメントの作成です。
PUT
メソッドに変更し、/library/_doc/1
を URL で指定します。ドキュメントの JSON データを送信するため、Body 欄で形式を raw を、種別として JSON を選択して、下のテキスト欄に JSON 形式データをコピペします。
送信し、返ってきた結果の result
欄が "created"
になっていればドキュメントが作成されています。
もう一度 _search
を実行して、作成されたドキュメントを得られることを確認しておきましょう。
ドキュメントを部分的に更新
後は手順を参考に、いろいろ試していきましょう。例えばドキュメントを部分的に更新して、
更新されたドキュメントを確認してみたり。
ドキュメント検索の準備
これも手順にあるものです。まず既存のドキュメントを削除します。
/library/_bulk
リクエストでドキュメントを一気に作成し、結果でエラーが無いことを確認します。
ドキュメント検索
後はいろんなパラメータを指定して検索機能を試せます。例えばタイトルに "fox" が含まれるドキュメントは4つ結果が返ってきます。
手順にある AND 検索を試してみた結果がこちら。
お掃除
k8s は試した後のお掃除も楽でいいですね。以下で作成したリソースを削除します。
kubectl delete service elasticsearch
kubectl delete deploy elasticsearch
まあ、IKS 無料クラスターの場合は、単にクラスター削除すれば良いだけなのですがw
というわけで
Elasticsearch を簡単にですが、実際に試してみました!
各種の解説文やドキュメントを読みつつ、サンプルを自分で試してみるのが理解の早道だとおもいます。単に読んでいるだけだと、無意識に読み飛ばしちゃったり、寝ちゃってどこまで読んだか忘れてしますので(僕だけかも…)。
参考にさせていただいた資料が素晴らしいので、このメモ自体の情報量は薄めなのですが。誰か一人でも「簡単そうなので、やってみよう!」と思っていただければ、メモ公開した甲斐があるってもんです。
それではまた!