Algolia 勉強会 in 金沢に参加してきた

最近はバタバタしてて参加してなかったkanazawa.rbさん中心で、
全然行けていないJAWS-UG 金沢さんの協力と、
DMM GAMESさんの会場で、
Algoliaという検索サービスの勉強会に参加してきました。

connpass.com

数週間前に、「Firestoreのデータに対して全文検索的なことをしたい場合はどうすれば。。。?」と悩んで、

全文検索  |  Firebase

にたどり着いていたので、タイムリーな勉強会でした。

Algolia のご紹介

www.slideshare.net

日本にいる唯一のAlgolia社員である篠原さんの発表。

Algoliaは世界中でいろんなところで使われており、日本でも100社以上が実際に利用しているとのこと。
→ 実績があるので、安心感がある。

フランス発だけど、最初から世界展開をめざして、ドキュメントも英語だし、社内も英語。
→ すげぇ。どこぞの会社とは違う。

検索のコアな部分はAWSなどのクラウド環境ではなく、自分たちで物理インフラの調達もしてるっぽい?
それによって、物理レイヤまで含めた、突き詰めた高速化をしているらしい。
→ 懇親会でも聞いたが、速度へのこだわりはかなり強いらしい。たしかに、デモなどでも信じられないレベルで高速。

社内でも自分たちのサービスを利用して、社内ドキュメントの検索エンジンを作成することで、各人の作業効率が上がったらしい。
→ よさげ。自社でもやりたい。インクリメンタルに高速に結果が出るのは、ちょっと体験が変わる。

検索では、TF-IDFに重みづけなどのチューニングすることで適合性を上げる=良い検索結果を出すようにすることが一般的?なところだが、職人芸な部分が出てくる。
Algoliaでは、Tie-breaking Algorithmを利用し、チューニングをやりやすくしている。(また、高速なレスポンスにも寄与しているっぽい)
→ サービスごとに「良い検索結果」は変わると思うので、難しい部分ではありそう。ただ、その試行錯誤がやりやすそうなのは良い。

Algoliaはダッシュボードも充実しており、結果0件だったクエリや、ユーザの選択が検索結果の何番目だったかなどを追える。
特定のキーワードに対して一番上に表示させたりもできる。特定のキーワードを、別の条件式に変えることもできる。
→ 実際のユーザの行動からチューニングへフィードバックしやすそう。

Algolia ハンズオン

www.slideshare.net

AlgoliaのInstantSearch.jsを利用して、step by stepでwidgetを追加していく。

とりにかく、「こんなにかんたんに、検索周りのUIを実装できる!」というのがよくわかるハンズオンでした。

いい感じにstepを踏んでもらっていたし、答えも用意されている状況だったので、並行して自分で作成したアカウントでもやってみました。
ただ、 refinementList widgetなどがエラーになったままなのは謎のまま。。。(プランに依存したりするのだろうか。。?)

にしても、価格.comみたいな、カテゴリとか価格とかいろんな軸での検索をかんたんに作れるのはすごかった。

Algolia 利用事例紹介

speakerdeck.com

クラウドファンディングプラットフォームであるCAMPFIREでの具体的な事例。
実際に使っていった中で、良かったところや難しかったところが聞けたのは良かった。

クラウドファンディングの特徴として、文章部分に熱い想いが入って文章が長くなりがち。
エンドユーザからも、複数キーワードからあいまいにマッチした結果を求められる。
→ 通常のショッピングサイトとは、求められるものが違いそうで、難しそう。

使ってみて、実際にレスポンスが爆速だった。
また、ドキュメントは充実しており、SDKもオープンになっているので迷いづらい。
monitoring、analyticsが優秀。
→ 検索性能の向上とかは難しそうだけど、consoleが充実してて試行がやりやすそう。

レコードごとのサイズ制限や、ソートは難しい。
→万人向けではなさそう。ただし、ハマる場面は多そう。

開発者ごとのdevやstgなど、環境ごとの切り分けを考える必要がある。
dev環境を共用してたりすると、誰かの開発によって不正データが発生し、開発が止まったり。
→このあたり、ローカルシミュレータがほしい気がしました。

超高速リアルタイム検索APIをたぶん支えているAWS

speakerdeck.com

https://techracho.bpsinc.jp/hachi8833/2018_06_20/57589 をもとに、AWSの構成紹介と、それぞれの要素の最近のリリース。
Algoliaの管理側インターフェースは、AWSの鉄板構成らしい。(ただし、資料時点からはいろいろアップデートされてる。。?)

AWSのアイコンが一新されてた、ってのが一番の衝撃的アップデート。

EC2で24TBメモリインスタンスとか、C5nインスタンスが増えた。
→24TBメモリインスタンスとか、誰が使うんだろう。。。

ELBは、L7的な動きをするALBも出てきたし、Lambdaをバックエンドにもできる。
→EC2インスタンス立てて、フルスタックなフレームワークをやらないって選択肢もありそう。

RDSにサーバレスモードもできた。
→利用頻度の低いアプリとかは良さげ。

AWS Well-Architectedを読もう。
それをベースに、要件に合わせてカスタマイズしよう。
ただし、「本当に外れる意味があるのか?」は問い続けよう。
→ベース知識は大事。作るサービスごとに特性が違うから、それに合わせてカスタマイズする。しない選択肢もある。

以下、メモそのまま

## Algolia のご紹介

日本のAlgolia社員は現在1名のみ。
元AWSの社員。
アルで利用されている。
https://speakerdeck.com/vexus2/alu-algolia いい感じの資料らしい。
世界で7000社以上に利用されている。
日本にも、東京と大阪にデータセンターがある。
東京にもオフィスが解説される。
日本でも、100社以上が利用している。
KARTEのサポートサイトなどでも利用されている。
shopifyやzendeskのオプションとしても利用され始めている。
Twitchでのインクリメンタル検索などでも利用されている。
Algoliaは、最初から世界展開をめざし、フランス発だけど最初から英語メイン。

すばやく構築、高速な検索。
開発者の使いやすさ以外にも、ビジネスの人やエンドユーザーの使いやすさも求めている。
HTTPでリクエストして、JSONで返却される、というのがメイン。
99.999%以上のSLA。高速なレスポンス。
インフラのぶっちゃけ話が、ブログになっている。
Railsからalgoliaを使うための翻訳記事もある。
最近、Azure上でも動くようになった。
Algoliaは、基本的にメモリに情報を載せている。ベアメタルサーバでは対応できないレベルのデータ量の利用も出てきた。

社内での、いろんな情報をインデックスさせてみたら、社員それぞれが10分ぐらい時間を節約できたのでは?という状態に。

件数が少なく、更新頻度が低いのであれば、JSONファイル+grepでも良い。
ある程度までは、RDBMSのlike検査でも対応できる。
全文検索エンジンを入れようとすると、運用経験が必要。

検索自体は難しい技術じゃない。
転置インデックスを作成する。
データがでかくなってくると、管理するのが難しくなってくる。
"適合性"、良い検索とは?
TF-IDF
特定のフィールドをブーストしようとすると、勘の部分が多くなってくる。
日本語の区切りは難しい。
Algoliaは、自然言語処理に充填をおいているわけではない。
Tie-breaking Algorithm
typo検索について、日本語もできるようになった。
geo検索できる。
ランキング方式をWeb上で変更することができる。

dashboardも充実している。
結果0件だった率など。
クリックされたのが、何番目の検索結果だったのか?など。
特定のキーワードに対して、一番上に出したいものを指定できる。
"安い"というキーワードに対して、"$20以下"に置き換えることができる。

## Algolia 利用事例紹介

CAMPFIREでの事例
月間200万アクティブユーザ
23,000プロジェクトぐらいがある。

文章については、1,000,000文字を超えることもある。
複数キーワードでのあいまい検索。
→自前でやろうとすると、コストが高い。 →Algoliaを導入。

本当に爆速。
想定以上にSDKとドキュメントが充実。
想定以上に、monitoring、analyticsが便利。

index size limitとjson frameとSDK
リミットが10KB。登録データをトリミングしたり。
POSTするJSON frame全体で10KB

ソートとreplicaとrecord limit
複数のソート種別を実現しようとすると、replicaを用意する必要がある。
レコード数が倍で増えてくる

deploymentとtestとqa
環境ごとに、どのように切り分けるか。
手元でのテストをするために、indexを切り分けるか?
他の人が作った不正なデータで壊れる。


## 超高速リアルタイム検索APIをたぶん支えているAWS

メモ取るの忘れて聞いてたので、スライド見直しながらメモとりなおし。

https://techracho.bpsinc.jp/hachi8833/2018_06_20/57589 をもとに、AWSの構成紹介と、それぞれの要素の最近のリリース。

管理インターフェースは、AWSの鉄板構成で作られてるっぽい。(ただし、記事から更新されているものもあるという噂)

AWSのアイコンが一新されたらしい。

EC2
18TBと24TBメモリのインスタンスが追加される予定。
C5nインスタンスという、通信速度関連に特化したインスタンスが追加された。

ELB
L7的な動きをするALB。
ACMでhttpsの証明書を設定できる。
Lambdaの実行もできる。(EC2インスタンスがなくても、独自処理を実行できる)

RDS
サーバレスモードもできた。
ただし、寝た後の一発目は遅いらしい。

AWS Well-Architectedを読もう。
それをベースに、要件に合わせてカスタマイズしよう。
ただし、「本当に外れる意味があるのか?」は問い続けよう。

おまけ

車で行ったので飲めなかった日本酒

過去の経験を生かして、控えめな量のピザ(どうせ二次会?行くので)

金沢 - 富山間の2時間弱の運転後の、深夜のギルティ。