Elasticsearchが楽しくなってきた件について

実は近頃Elasticsearchをさわっています。
始めはドハマリした部分があって嫌いになりかけましたが、すこし仲良くなってきました。長い付き合いになるかもと思うほどです。

なんでさわってるかって言うと、

・緯度経度を含むデータを矩形で検索したかった
・Jsonのような構造でテーブルに当たる構造を組めるので、難解なベクターカラムを使わなくて済む

1点目については

MySQLやMongoDBでもできます。たぶん。
それぞれどれくらい早いのかベンチマークはしてないですが、数万件を一瞬で検索できる程度には早いです。
あと、検索範囲の指定はGeoPolygonのフォーマットでいけます。

2点目については

僕にとっては結構大きな点でした。
だってMroongaでタグ的な物(用途とデータのセット)を管理することを考えると、

・ベクターカラムでレコード内にタグのIDを持つ
・IDをPHPでexplodeとかした上で再度クエリを投げてタグのデータ自体を検索

とかやっちゃうわけです。(もっといい方法があったのかもですが)
実際処理の効率はそこまで悪くないんですが、コーディングが直感的でなくなってくるんで、開発効率は落ちました。

その辺をMySQL&MroongaからElasticsearchに置き換えることでわかりやすくしていけるんじゃないか!とか考えると楽しくなってきました。

それに、スコアリングによる検索結果のソートもできるし機械学習と連携して良いデータベースに育てていけそうですよね。

「Amazon Elasticsearch Service」とか言うサービスが有るらしい

ってことで、少し話が飛びますが、調べてみるとなんだか良さ気。

簡単に言うとElasticsearchの走ってるサーバーをAmazonさんがクラウドで使わせてくれるってこと。料金体系はEC2みたく利用時間による従量課金+α。

やってることの規模感が大きくなってるし、普通にEC2とかで立てるより断然高速かつ簡単っぽいので触ってみました。

値段的にはこんな感じ。

スペック的には色々あるんですが、Amazonさんのデフォルト設定はm3.mediumです。
ちなみにt2のシリーズは一応テスト環境向けらしいです。(情報ソースは忘れましたが。)

ってなことで、スペック的にも無難そうなm3.mediumにして進めました。

ほとんど設定することも無く、せいぜいアクセス元のIPを明示的に指定してやるくらいです。おかげで、インスタンスの立ち上げは超簡単でした。

一応初めてのことなので、公式のブログ等を拝見しながらですが。
http://aws.typepad.com/aws_japan/2015/10/amazon-elasticsearch-service.html
http://dev.classmethod.jp/cloud/aws/amazon-elasticsearch-service-released/

実はテスト環境も構築しないといけないので、Ubuntuにも自力でインストールして試したりしましたが、うまく繋がらなかったり、効率よく運用するためにプラグイン入れたりとかで当然一手間あります。

テスト用もクラウドで構築しちゃえって人は悩むこと無いかもですね。

さて、具体的に良さが伝えられてないままですが

何が言いたかったかというと、

・導入がAmazon Elasticsearch Serviceなら簡単
・Jsonフォーマットでの利用なので、データの入れ子構造にも対応できる
・スコアリングと機械学習により高まる将来性

とかです。
まだまだ僕もかじった程度なので、間の抜けたことを書いてたらと思うと恐縮です。

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.