2019年2月21日木曜日

お勉強してきた : 第29回Elasticsearch勉強会「検索」2019.02

行ってきたのでメモです。()は個人的な感想。

1.「GameWithで検索システムが使われるまで」: GameWith めもりーさん

https://t.co/xevsW88Ran
・着手からリリースまで3か月しかなかった
・2か月で7万コミットしてた(やばい)
・GameWithはAWSを使ってるが、辞書問題あったので AWS Elasticsearch Service は使えない。
・Sudachi使って表記ゆれ正規化してる。kuromojiとの比較はしてないが、引っ掛かりやすそうな雰囲気あり。
・負荷テストはGatlingで実施した
・インフラ構成改善が必要(マスターノード全面にいるのはよくない・・)
・ユーザ属性に応じた検索クエリ改善をやりたい、登録してるゲームに重みつけるなど(いいねb)

2.「ClassiでのAmazon Elasticsearch Serviceの活用」: 中村 真一郎さん (twitter id: s_nakamura)

https://t.co/6HUPT2Q9HI
・Amazon Elasticsearch Service を使って、テスト・問題・アンケートの検索、メッセージのやり取りの検索で使っている
・もともとMySQL(mroongaストレージエンジン)で作ってたが、階層構造のデータ検索に向いてなくてパフォーマンス悪化。Elasticsearchに。
・学校数が多くなった時にindex構成を変更。master-node, data-node 構成も工夫。
・_idの値をmessageのidにすると被ってくるので自前で採番。Rails の Elasticsearch-model gem で動かず修正するハメに。
・AWS Elasticsearch はバージョンアップの dry-run ができてハッピー。数十分で更新終わる。
・kibanaは使ってない。セキュリティ強めなので、Elasticsearchの中身を見るなら限られた端末から実行(堅実)
・チューニングしきれてないので運用ノウハウが課題

3.「C2Cサービスの為のaws Es」: @factory_ayさん

・B2B,C2C,G2Gでチューニングポイントが違う サジェスト/レコメンド スコアリング + 期間処理 など 今日は話さない(聞いてみたいけど1日コースな予感)
・ES Rally の話
・C2Cサービスの特性 ユーザーのITスキル/ドメイン知識が少ない、属性情報の信用値が低い タグ、カテゴリなどが特に
・鉄腕DASHをググる例 わかってる人:TOKIO、0円食堂、農業、島、溶鉱炉 わかってない人:アイドル、ジャニーズ・・・
・ロングテール相手にしないといけないので、B2Bと違う
・精度に関する考えがゆるい。広く深く、件数の精度を求めない。(再現率重視)
・データ量がシビア。増え続ける。スケールできる仕組みがないと死ぬ。
・ElasticsearchでAWS.ESは設定が大きく縛られるし一時的な設定変更できないしプラグイン制限あるし厳しい(「検索」で使うならそう思う)
・マスターノードとデータノードでサイジングわけるべき
・ngramは網羅性、消費量大、検索以外に使えない nounは精度高いし消費少だしタグの生成が可能
・品詞フィルタの問題点は「ひらがな」対応。漢字、カタカナ、英語はほぼ名詞/動詞/形容詞/副詞 だが、ひらがなは辞書がないと助詞/助動詞に切られて辛い(わかる)
・「ごちうさ」「けもフレ」問題
・品詞フィルタめっちゃチューニングした(ほしい)
・@とURLをつぶすフィルターは、type:pattern_replace でフィルタパターン作ればつぶせる。
・HighlightはUnified,plain,FVH 設定でメモリ消費が下手すると6割くらい違ってくる。Plain使っちゃダメ Plainが必要ならマッピング設定が誤ってるはず。index_optionsでoffsets設定するとだいぶマシにあるので一度見直してみたほうがいい。
・Index_optinos と term_vector によるメモリ消費比較。設定してないなら見てみると確実に効果出るところ(TODO:あとでみる)

4. 懇親会

発表に絡んで色々トークできたのも楽しかったー。

大量インデックスはできなくはないけど、マスター候補ノード・データノードコーディネーター専用ノード・MLノード/シャード・レプリカ考えないと破綻するケースあり(=だから、無為にインデックス大量に作る前提は控えたほうがやっぱりベター)な雰囲気。
公式リファレンス含め以下は一読しとく感じか。
https://www.elastic.co/jp/blog/how-to-configure-elasticsearch-cluster-better
https://www.elastic.co/jp/blog/elastic-stack-standard-deployment-for-logging (これはloggingですが)

個人的には↓
https://github.com/fdv/running-elasticsearch-fun-profit
みたいに、実例ベースで具体的な数字が載ってるのもイメージが湧くのでよいかなと。
https://github.com/fdv/running-elasticsearch-fun-profit/blob/master/004-cluster-design/004-cluster-design.md#designing-the-perfect-elasticsearch-cluster
perfect-elasticsearch-cluster ってまたすごいタイトルですがw

・辞書はどこも苦労しつつ試行錯誤してそう、データ投入前に自前で形態素解析→english(whitespace?) tokenizer で頑張る方式はわりとある模様。
・検索でマネージドサービス使うなら Elastic のクラウド一択。Amazon Elasticsearch Service は検索用途なら使うとドハマりしそう。マシンログとか放り込んでおくのはよい気がする。

久しぶりに勉強会行けたけど、有意義な話たくさんできて幸せでございました。