IKS+Postman で Elasticsearch をお気楽に体験してみるメモ


最近、Elasticsearch サービスに関する話をよく聞きます。興味もあったので、ちょっと調べ、軽く試してみました。これはそのメモです。

Elasticsearch とは

Elasticsearch は OSS の、Lucene 基盤の分散処理マルチテナント対応検索エンジン、だそうです。全文検索に特化しているとか。以下が理解の参考になりました。

個人的な第一印象は、テキスト検索が得意な 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 を簡単にですが、実際に試してみました!

各種の解説文やドキュメントを読みつつ、サンプルを自分で試してみるのが理解の早道だとおもいます。単に読んでいるだけだと、無意識に読み飛ばしちゃったり、寝ちゃってどこまで読んだか忘れてしますので(僕だけかも…)。

参考にさせていただいた資料が素晴らしいので、このメモ自体の情報量は薄めなのですが。誰か一人でも「簡単そうなので、やってみよう!」と思っていただければ、メモ公開した甲斐があるってもんです。

それではまた!