『フリマアプリ「フリル」を支えるElasticsearchを用いた全文検索』に参加した #spzcolab

『フリマアプリ「フリル」を支えるElasticsearchを用いた全文検索』に参加したのでそのメモを記しておく。

supporterzcolab.com

  • 時間 2017.9.20(木) 19:30-21:00
  • 場所 渋谷スクエアA
  • 人数 70-80名くらい

*電車の関係で少し遅れて20:00頃に到着したので情報の漏れがあると思いますがそこらへんはご了承願います。

 

 

 

 

参加したきっかけ

検索に関する勉強会やイベントのカレンダー( 検索 - 検索カレンダー )を作っているので、その情報収集をしているときに見つけたと思う。参加した理由は検索が好きだから。 

勉強会のタイムスケジュール

  • 20:00-20:15 フリルの堀井さんのお話
  • 20:15-20:35 フリルの堀井さんに質問タイム
  • 20:35-21:00 懇親会

20:00-20:15 フリルの堀井さんのお話

冒頭にも書いたとおり、私は途中から参加したので最初の30分(19:30-20:00)は聞けていない。聞けたところだけメモしておく。 

プライマリシャードとレプリカシャード

障害が起きたときも可用性が保たれる…とかそんな話だったと思う。マスターノードに関してもしゃべられていたと思う。ここらへんの話は最後のほうしか聞けていないのでもうちょっとはやく参加していれば……。

yano3さんのこの資料に近い話をされてたと思う(たぶん)。

Elasticsearch クラスタ概説 · GitHub 

Analysis

前処理をして、トークン分割して、後処理をして…のAnalyzerの話。

shibayuさんのこのブログに近い話をされてた。

blog.shibayu36.org

検索システムの精度おける2指標

適合率と再現率の2つがあって関係はトレードオフだよね。どちらをとるのかもサービスによるよね、みたいな話。wikipediaを参考文献に挙げられていたのでたぶんこのページだと思う。

情報検索 - Wikipedia 

Tokenizer

Ngram(N文字単位で文章を分割)とanalysis-kuromoji(日本語形態素解析)の2種類があるよねの話。

Kidoさんのこのブログに近い話をされてた。

medium.com

辞書をつくる

フリマアプリだとどうしてもブランド名や商品名など固有名詞が多い。それらの固有名詞は辞書をつくって管理して検索精度を高めているという話。フリルは月1にまとめて泥臭く手作業で追加しているらしい。でも効率よく辞書を作成するために自社で辞書の管理画面などを作成していた。

フリルの方が辞書に関してスライドを挙げられていたのでまさにこの話だった。スライドがかわいい: )

ファッションを扱うサービスのために、Elasticsearchのユーザー辞書とシノニム辞書を作った話 // Speaker Deck

検索クエリの改善

1つはクエリに対してスコアリングをしていて、フィールドによって重みを調整している。もう1つはmin_scoreオプションに0.3を設定して関連度の低い商品を足切りしている。(ここらへんもっと知りたい)

そして、それらを行ったあとA/Bテストを実施している。フリルではアクション率(閲覧回数÷検索品数)という指標を6%あげることができたことがあるそう。

この方のブログと近い話なのかな…?

qiita.com

Indexの更新

フリルの検索のIndexの更新はほぼリアルタイム!らしい。リアルタイムだとお客さんの要望(例えば、その時に商品が売り切れているかを確認…)には応えられるけどその分実装が複雑になる。Indexは商品モデルの更新をトリガーに非同期で更新している。なぜ同期的ではないかというと、オーバーヘッドコストが高いから。

フリルはRailsで実装されてるからこの方のブログの話が近いのかな?ここらへん詳しくないので今度調べてみようかな。

www.bokukoko.info

20:15-20:35 フリルの堀井さんに質問タイム

すごいなと思ったのが最初から最後まで質問を上げる手がずっと途切れなくて15個くらい質問続いてた…。会場の雰囲気としては永遠に質問が途切れない空気でElasticsearchに関してこんなに疑問や質問を抱いている方がたくさんいるんだなあ、と改めて思った。(私も最後に質問させていただいただきました。ありがとうございます。)

特に面白いなと思った質問2つをメモしておく。

Elasticsearchのバージョンアップの頻度はどれくらいであげていますか?

「バージョンをあげるタイミングは難しい。今は2系で運用している。来年5系に上げるかもしれない。現在検討している。」

どれくらいの頻度であげているのかはわからなかったけども。バージョンアップするの難しいのかなあ。私はバージョンアップ作業を実運用とかでやったことがないのでどこらへんが難しいのかな…と気になった。いろんな方のブログを見ていると2系使っている人が多い印象を受けるけどバージョンアップ問題これからでてくるのかな。

www.elastic.co

マスターノードが死んだことはありますか?

「マスターノードの障害もありました。全然頻度は高くないですが。でもクラスタ構成で救われました。」

クラスタ構成については勉強会の冒頭で話されていたよう(たぶん)なので、聞きたかった。クラスタ構成よくわかっていない。

www.creationline.com

 

懇親会

勉強会のとなりの部屋で立ちながらお話する形式だった。お酒はサポーターズさんが用意してくれてた。一定時間がたったらシャッフルタイム?で席替えじゃないけど、いろんな方と話せるようになってたのがへ〜と思った。堀井さんとも少しお話できてGroongaの話とかノードの話をちょっと聞けたのが良かった(ありがとうございました: ) )。 

 

まとめ

  • Elasticsearchの知見がえられた
  • フリルの検索についてもっと聞いてみたくなった!
  • 渋谷はこわい