『フリマアプリ「フリル」を支えるElasticsearchを用いた全文検索』に参加した #spzcolab
『フリマアプリ「フリル」を支えるElasticsearchを用いた全文検索』に参加したのでそのメモを記しておく。
- 時間 2017.9.20(木) 19:30-21:00
- 場所 渋谷スクエアA
- 人数 70-80名くらい
*電車の関係で少し遅れて20:00頃に到着したので情報の漏れがあると思いますがそこらへんはご了承願います。
フリマアプリ「フリル」を支えるElasticsearchを用いた全文検索
— sakura@検索 (@818uuu) 2017年9月20日
フリルの堀井さんの講演です〜
電車間に合わなくてちょっと遅刻してしまった#spzcolab #グラレコ しました〜 pic.twitter.com/eQvReEJHAM
参加したきっかけ
検索に関する勉強会やイベントのカレンダー( 検索 - 検索カレンダー )を作っているので、その情報収集をしているときに見つけたと思う。参加した理由は検索が好きだから。
勉強会のタイムスケジュール
- 20:00-20:15 フリルの堀井さんのお話
- 20:15-20:35 フリルの堀井さんに質問タイム
- 20:35-21:00 懇親会
20:00-20:15 フリルの堀井さんのお話
冒頭にも書いたとおり、私は途中から参加したので最初の30分(19:30-20:00)は聞けていない。聞けたところだけメモしておく。
プライマリシャードとレプリカシャード
障害が起きたときも可用性が保たれる…とかそんな話だったと思う。マスターノードに関してもしゃべられていたと思う。ここらへんの話は最後のほうしか聞けていないのでもうちょっとはやく参加していれば……。
yano3さんのこの資料に近い話をされてたと思う(たぶん)。
Analysis
前処理をして、トークン分割して、後処理をして…のAnalyzerの話。
shibayuさんのこのブログに近い話をされてた。
検索システムの精度おける2指標
適合率と再現率の2つがあって関係はトレードオフだよね。どちらをとるのかもサービスによるよね、みたいな話。wikipediaを参考文献に挙げられていたのでたぶんこのページだと思う。
Tokenizer
Ngram(N文字単位で文章を分割)とanalysis-kuromoji(日本語形態素解析)の2種類があるよねの話。
Kidoさんのこのブログに近い話をされてた。
辞書をつくる
フリマアプリだとどうしてもブランド名や商品名など固有名詞が多い。それらの固有名詞は辞書をつくって管理して検索精度を高めているという話。フリルは月1にまとめて泥臭く手作業で追加しているらしい。でも効率よく辞書を作成するために自社で辞書の管理画面などを作成していた。
フリルの方が辞書に関してスライドを挙げられていたのでまさにこの話だった。スライドがかわいい: )
ファッションを扱うサービスのために、Elasticsearchのユーザー辞書とシノニム辞書を作った話 // Speaker Deck
検索クエリの改善
1つはクエリに対してスコアリングをしていて、フィールドによって重みを調整している。もう1つはmin_scoreオプションに0.3を設定して関連度の低い商品を足切りしている。(ここらへんもっと知りたい)
そして、それらを行ったあとA/Bテストを実施している。フリルではアクション率(閲覧回数÷検索品数)という指標を6%あげることができたことがあるそう。
この方のブログと近い話なのかな…?
Indexの更新
フリルの検索のIndexの更新はほぼリアルタイム!らしい。リアルタイムだとお客さんの要望(例えば、その時に商品が売り切れているかを確認…)には応えられるけどその分実装が複雑になる。Indexは商品モデルの更新をトリガーに非同期で更新している。なぜ同期的ではないかというと、オーバーヘッドコストが高いから。
フリルはRailsで実装されてるからこの方のブログの話が近いのかな?ここらへん詳しくないので今度調べてみようかな。
20:15-20:35 フリルの堀井さんに質問タイム
すごいなと思ったのが最初から最後まで質問を上げる手がずっと途切れなくて15個くらい質問続いてた…。会場の雰囲気としては永遠に質問が途切れない空気でElasticsearchに関してこんなに疑問や質問を抱いている方がたくさんいるんだなあ、と改めて思った。(私も最後に質問させていただいただきました。ありがとうございます。)
特に面白いなと思った質問2つをメモしておく。
Elasticsearchのバージョンアップの頻度はどれくらいであげていますか?
「バージョンをあげるタイミングは難しい。今は2系で運用している。来年5系に上げるかもしれない。現在検討している。」
どれくらいの頻度であげているのかはわからなかったけども。バージョンアップするの難しいのかなあ。私はバージョンアップ作業を実運用とかでやったことがないのでどこらへんが難しいのかな…と気になった。いろんな方のブログを見ていると2系使っている人が多い印象を受けるけどバージョンアップ問題これからでてくるのかな。
マスターノードが死んだことはありますか?
「マスターノードの障害もありました。全然頻度は高くないですが。でもクラスタ構成で救われました。」
クラスタ構成については勉強会の冒頭で話されていたよう(たぶん)なので、聞きたかった。クラスタ構成よくわかっていない。
懇親会
勉強会のとなりの部屋で立ちながらお話する形式だった。お酒はサポーターズさんが用意してくれてた。一定時間がたったらシャッフルタイム?で席替えじゃないけど、いろんな方と話せるようになってたのがへ〜と思った。堀井さんとも少しお話できてGroongaの話とかノードの話をちょっと聞けたのが良かった(ありがとうございました: ) )。
#spzcolab pic.twitter.com/ftkw4nitFE
— sakura@検索 (@818uuu) 2017年9月20日
まとめ
- Elasticsearchの知見がえられた
- フリルの検索についてもっと聞いてみたくなった!
- 渋谷はこわい