Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
mosa siru
14,918 views
Elasticsearch for Hackadoll
ハッカドールにおけるElasitcsearch活用法。 DeNA社内向けに発表したものです。
Technology
◦
Read more
44
Save
Share
Embed
Embed presentation
1
/ 61
2
/ 61
3
/ 61
4
/ 61
5
/ 61
6
/ 61
7
/ 61
8
/ 61
9
/ 61
10
/ 61
11
/ 61
12
/ 61
13
/ 61
14
/ 61
15
/ 61
16
/ 61
17
/ 61
18
/ 61
19
/ 61
20
/ 61
21
/ 61
22
/ 61
23
/ 61
24
/ 61
25
/ 61
26
/ 61
27
/ 61
28
/ 61
29
/ 61
30
/ 61
31
/ 61
32
/ 61
33
/ 61
34
/ 61
35
/ 61
36
/ 61
37
/ 61
38
/ 61
39
/ 61
40
/ 61
41
/ 61
42
/ 61
43
/ 61
44
/ 61
45
/ 61
46
/ 61
47
/ 61
48
/ 61
49
/ 61
50
/ 61
51
/ 61
52
/ 61
53
/ 61
54
/ 61
55
/ 61
56
/ 61
57
/ 61
58
/ 61
59
/ 61
60
/ 61
61
/ 61
More Related Content
PDF
捗るリコメンドシステムの裏事情(ハッカドール)
by
mosa siru
PDF
katagaitai CTF勉強会 #5 Crypto
by
trmr
PDF
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
by
虎の穴 開発室
PDF
エキスパートPythonプログラミング改訂3版の読みどころ
by
Takayuki Shimizukawa
PDF
Ansibleはじめよぉ -Infrastructure as Codeを理解-
by
Shingo Kitayama
PDF
nginx入門
by
Takashi Takizawa
PDF
WebSocket / WebRTCの技術紹介
by
Yasuhiro Mawarimichi
PDF
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
捗るリコメンドシステムの裏事情(ハッカドール)
by
mosa siru
katagaitai CTF勉強会 #5 Crypto
by
trmr
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
by
虎の穴 開発室
エキスパートPythonプログラミング改訂3版の読みどころ
by
Takayuki Shimizukawa
Ansibleはじめよぉ -Infrastructure as Codeを理解-
by
Shingo Kitayama
nginx入門
by
Takashi Takizawa
WebSocket / WebRTCの技術紹介
by
Yasuhiro Mawarimichi
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
What's hot
PPTX
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
PDF
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PPTX
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
by
NTT DATA Technology & Innovation
PDF
SQLで身につける!初めてのレコメンド 〜 基礎から応用まで ~
by
Naoto Tamiya
PDF
異次元のグラフデータベースNeo4j
by
昌桓 李
PDF
Scalaエンジニアのためのモナド入門
by
Takashi Imahiro
PDF
Dockerfileを改善するためのBest Practice 2019年版
by
Masahito Zembutsu
PDF
雑なMySQLパフォーマンスチューニング
by
yoku0825
PDF
Linux女子部 systemd徹底入門
by
Etsuji Nakai
PPTX
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
by
Shota Shinogi
PPTX
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
by
DeNA
PPTX
MongoDBが遅いときの切り分け方法
by
Tetsutaro Watanabe
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
by
Miki Shimogai
PDF
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
by
Yahoo!デベロッパーネットワーク
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
PDF
Multibranch pipelineでいろいろ学んだこと
by
aha_oretama
PDF
プログラムを高速化する話
by
京大 マイコンクラブ
PPTX
XMPPの紹介
by
隆行 神戸
PDF
Gitでやるたのしい歴史改変
by
Kenichi KIBIHARA
PPTX
three.jsを「遅い」と思わせないデータの扱い方
by
jey en
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
by
NTT DATA Technology & Innovation
SQLで身につける!初めてのレコメンド 〜 基礎から応用まで ~
by
Naoto Tamiya
異次元のグラフデータベースNeo4j
by
昌桓 李
Scalaエンジニアのためのモナド入門
by
Takashi Imahiro
Dockerfileを改善するためのBest Practice 2019年版
by
Masahito Zembutsu
雑なMySQLパフォーマンスチューニング
by
yoku0825
Linux女子部 systemd徹底入門
by
Etsuji Nakai
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
by
Shota Shinogi
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
by
DeNA
MongoDBが遅いときの切り分け方法
by
Tetsutaro Watanabe
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
by
Miki Shimogai
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
by
Yahoo!デベロッパーネットワーク
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
Multibranch pipelineでいろいろ学んだこと
by
aha_oretama
プログラムを高速化する話
by
京大 マイコンクラブ
XMPPの紹介
by
隆行 神戸
Gitでやるたのしい歴史改変
by
Kenichi KIBIHARA
three.jsを「遅い」と思わせないデータの扱い方
by
jey en
More from mosa siru
PDF
開発速度が速い #とは(LayerX社内資料)
by
mosa siru
PDF
マイクロにしすぎた結果がこれだよ!
by
mosa siru
PDF
KYC and identity on blockchain
by
mosa siru
PDF
LayerXのQAチームで目指したい動き方 (社内資料)
by
mosa siru
PDF
ニュースパスのクローラーアーキテクチャとマイクロサービス
by
mosa siru
PDF
Go, memcached, microservices
by
mosa siru
PPTX
マイニングプールの収益配分と攻撃手法
by
mosa siru
PDF
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
by
mosa siru
PDF
Twitter SmartList (第5回若手webエンジニア交流会)
by
mosa siru
PDF
lua_nginx_module JSON-RPC 2.0 Batch Request
by
mosa siru
PDF
Payment Channel Introduction
by
mosa siru
PDF
how to make twitter list automatically
by
mosa siru
開発速度が速い #とは(LayerX社内資料)
by
mosa siru
マイクロにしすぎた結果がこれだよ!
by
mosa siru
KYC and identity on blockchain
by
mosa siru
LayerXのQAチームで目指したい動き方 (社内資料)
by
mosa siru
ニュースパスのクローラーアーキテクチャとマイクロサービス
by
mosa siru
Go, memcached, microservices
by
mosa siru
マイニングプールの収益配分と攻撃手法
by
mosa siru
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
by
mosa siru
Twitter SmartList (第5回若手webエンジニア交流会)
by
mosa siru
lua_nginx_module JSON-RPC 2.0 Batch Request
by
mosa siru
Payment Channel Introduction
by
mosa siru
how to make twitter list automatically
by
mosa siru
Recently uploaded
PDF
20260119_VIoTLT_vol22_kitazaki_v1___.pdf
by
Ayachika Kitazaki
PDF
TomokaEdakawa_職種と講義の関係推定に基づく履修支援システムの基礎検討_HCI2026
by
Matsushita Laboratory
PDF
アジャイル導入が止まる3つの壁 ─ 文化・他部門・組織プロセスをどう乗り越えるか
by
Graat(グラーツ)
PDF
自転車ユーザ参加型路面画像センシングによる点字ブロック検出における性能向上方法の模索 (20260123 SeMI研)
by
Yuto Matsuda
PDF
maisugimoto_曖昧さを含む仕様書の改善を目的としたアノテーション支援ツールの検討_HCI2025.pdf
by
Matsushita Laboratory
PDF
ST2024_PM1_2_Case_study_of_local_newspaper_company.pdf
by
akipii ogaoga
PDF
Team Topology Adaptive Organizational Design for Rapid Delivery of Valuable S...
by
akipii ogaoga
20260119_VIoTLT_vol22_kitazaki_v1___.pdf
by
Ayachika Kitazaki
TomokaEdakawa_職種と講義の関係推定に基づく履修支援システムの基礎検討_HCI2026
by
Matsushita Laboratory
アジャイル導入が止まる3つの壁 ─ 文化・他部門・組織プロセスをどう乗り越えるか
by
Graat(グラーツ)
自転車ユーザ参加型路面画像センシングによる点字ブロック検出における性能向上方法の模索 (20260123 SeMI研)
by
Yuto Matsuda
maisugimoto_曖昧さを含む仕様書の改善を目的としたアノテーション支援ツールの検討_HCI2025.pdf
by
Matsushita Laboratory
ST2024_PM1_2_Case_study_of_local_newspaper_company.pdf
by
akipii ogaoga
Team Topology Adaptive Organizational Design for Rapid Delivery of Valuable S...
by
akipii ogaoga
Elasticsearch for Hackadoll
1.
Elasticsearch for Hackadoll 2015/08/31
@mosa_siru 1
2.
自己紹介 2
3.
@mosa_siru • 「もさ」って呼んでください • 「ボンバーマンの人」
って認 識いただければ大丈夫です • もし興味があれば動画をご覧くださ い http://www.nicovideo.jp/watch/ sm13612359 • 最近はSplatoonもやってます 3
4.
@mosa_siru at DeNA •
1年目: 新卒。プラットフォームでAPIとか運用 • 2年目: ハッカドール 立ち上げからジョイン • サーバーサイドを担当 • 3年目: Web版ハッカドールを作ったり、メ ジャーアップデートしたり 4
5.
ハッカドール サーバーサイド • なんかたくさん作った
with @xaicron , kommy • API (100個) • ニュース配信APIからゲームの賞品付与APIま で、機能ありすぎて笑える • Worker (70個) • Crawler, Remote Notification, etc.. • 非同期処理やバッチ処理する君 5
6.
ハッカドール サーバーサイド • Web •
Web版でAngular実戦投入したけど良さげでした • リコメンドシステム • 分析基板部と連携 • OPE(管理ツール) • ImageProxy(画像変換サーバー) • Nginx Module, etc… 6
7.
アジェンダ 7
8.
アジェンダ 1. ハッカドールって? 2. Elasticsearch活用法 A.
検索 B. 関連記事 C. リコメンド 8
9.
1. ハッカドールって? 9
10.
ハッカドールって? • アニメ・マンガ・ゲームなど、 オタク系の記事のみを扱った ニュース配信アプリ • おすすめ商品、イベントも届 けてくれる •
使えば使うほど学習していく 10
11.
ハッカドールって? • ゲーミフィケーション • というかゲームできる •
オタクユーザーに刺さる機能 が満載! 11
12.
2014夏コミに合わせてリリース 12
13.
• 高リターンレート • 高ヘビーユーザー率 高いユーザー評価 13
14.
Apple 2014 Best
App! 14
15.
2015 コミケ/アニサマ 15
16.
アニメ化! 祝・アニメ化!
17.
2. Elasticsearch活用法 17
18.
ハッカドールでのES活用法 (A)検索 (B)関連記事 (C)キャリブレーション 18
19.
A. 検索 19
20.
ハッカドールでの検索機能 20 • 最新ニュース、新商品、イベント情報を検索できます • というのはかんたんですが…
21.
最高の検索のために
22.
まずは検索に使うためにも、 記事にタグを付けたい 22
23.
とりあえずmecabを用いて 記事を形態素解析 23
24.
最高の辞書が必要 24
25.
最高のオタク辞書を作る • Wikipedia, ニコニコ大百科からオタク系キー ワード一覧を取得 •
手動で最新キーワードを管理ツールから登録 • 詳細は去年つくったスライド「 るリコメ ンドシステムの裏事情」をご覧ください 25
26.
最高のシノニム 26
27.
シノニムと正規化 • 表記揺れや同義語を吸収したい • まず分かち書きされたものに対して各種正規化 •
Unicode正規化 (NFC) • 伸ばし棒 − ∼ ∼ ─ ━ ╌ ╍ ╴ ╶ ╸ ╺ ー - - – — ― − ー => ー • 連続するものを1つに • single quote ‘ ’ => ' • 全角英数字 A => A • 英数字大文字 A => a • 半角カタカナ アア => アア 27
28.
シノニムと正規化 • 各種シノニムに変換 • 管理ツールで登録しておく 28
29.
最高のフィルター • あまりにも関係なさそうなタグはフィルタする (ブ ラックリスト) •
例:「こんにちは」「名無しさん」 • 正規表現でまとめて弾く • 例:d+時d+分 • ブラックリストも管理ツール上で管理 29
30.
ここまでのまとめ • クローリングした記事をオタク辞書で分かち 書きし、正規化・シノニム変換を施し、フィ ルタしたものをタグとする • ようやくできたタグをESにPOST 30
31.
ちなみに • これらのマスターデータの運用は辛い • A
→ Bへのシノニムが登録されたら、全てのタグAを 持つ記事のタグを再計算してESに再登録させる仕組み • シノニムが削除された場合は? • 辞書やシノニムをESに担当させることもできるが、辞書 やシノニム更新のたびにreindexingが必要だったり辛そ うなのでやってない 31
32.
検索クエリ 32
33.
検索クエリ (ようやくESの話) 1. クエリ「まどマギ」で検索したとする 2.
クエリをシノニム変換:「まどマギ」=> 「魔法少女まどか☆マギカ」 3. まずは完全一致でタグに当てる (terms query) 4. あるいは部分一致で全文に当てる (query_string query) 5. 最後に除外フィルタを通して最新順で返す • 例:ベイジアンフィルタにより「えっちな記事」判定されたものを外す • 例:各種ユーザーフィルタ(まとめサイトOFFなど) • なお最新順で返す検索仕様は簡単(スコアリングを考えなくて良い) 33
34.
検索クエリ 4. 「あるいは部分一致で全文に当てる」とは • 目的:クエリ「魔法少女」でも「魔法少女まどか☆マギカ」に当たるよ うにしたい •
analyzerのあるフィールドに query_string query • ただし一方「魔法少女」で 「少女」に当たらない よう”” で囲んでいる => クエリは分かち書きされない 34
35.
検索クエリ (ページング) • やっぱりlimit
offsetは使いたくない • n+1件取得して、n+1件目の記事のtimestamp, idを pageTokenとしてレスポンスに含める • n+1件目は結果から除外する • クライアントはページング時のリクエストに pageTokenを入れる • サーバーはpageToken以降の記事をn+1件取得する (以下繰り返し) 35
36.
検索補完 36
37.
検索補完 • 補完により、入力補助はもちろん表記揺れリ スクも解消できる • 実装はまさかのMySQL!likeで前方一致!w •
あらかじめbatchで全キーワードの登場数を 管理するテーブルを作っている (TDIDFのDF) • nginx proxy cacheでフロントキャッシュして 負荷軽減 • カジュアルに使えるのでおすすめ 37
38.
検索補完 • 読みがな情報もいれておくことで、ひらがな から漢字への補完も可能 • 読みがなはニコニコ大百科から取得したり、 管理ツールから入力 38
39.
最高の検索になれたか?
40.
まだまだできるはず • 心地よく、違和感なく使えるレベルであるのは間違いない • が、まだGoogleにはなれてない •
Fussy検索 • 「もしかして」 • And検索の補完 • “AND” “OR” “NOT” 文への対応 • シノニムやらもろもろと帳尻あわせつつ入れるの大変。やっぱり自然言 語まわりはむずかしい(こなみかん 40
41.
おまけ:検索活用法 41
42.
ウォッチリスト 42 • 好きなタイトル名などを登録しておくと、 そのキーワードを含んだニュースが出る たびに教えてくれる(RSS like) •
オタクであるほど、好きな作品のニュー スは逃したくない • OR検索でElasticsearchから取得 • 検索を作りこんだおかげで可能となっ た
43.
B. 関連記事 43
44.
関連記事 • その記事に関連する記事を教 えてくれる機能 44 ニュース記事 商品記事
イベント記事 ニュース記事 商品記事 イベント記事
45.
関連記事 • 基本は先ほど紹介したタグ情報をもとに、ESのmlt (more like
this) クエリで近い記事を出しています • mlt:「似た」ドキュメントを探してくれるイケメン機能 です • 一致するタグを沢山もっている記事ほどスコアが高く なる • 全部”タグ”で完結するので、ニュース/商品/イベント記事 をまたいだマッチングが可能 45
46.
関連記事(クエリ) 1. その記事のタグ情報を取得 2. mltスコアを計算 3.
新しい記事を重視するために、decayを掛け あわせて最終スコアとする (function_score query) 4. 除外フィルタを通し、スコアが高い順に表示 46
47.
関連記事(クエリ) 2. mltスコアを計算 • 複数回登場するタグは、その回数分だけ 並べている 47
48.
参考:mltのカスタマイズ箇所 name description default percent_terms_to_match このパーセント以上タグが マッチしないと似ていると みなされない 0.30 min_term_freq 最低この個数はタグがマッチしない といけない 2 min_doc_req
全ドキュメント内でこの個数以上登 場するタグのみ用いる 5 ニュース、商品、イベント記事のタグの特性をもとに、 微妙に値をカスタマイズしている
49.
関連記事(クエリ) • 記事の最新度(decay)と掛 けあわせて最終スコアと する ○日古くなると●倍のスコアとな る曲線を指定できるが、パラメー ター調整はわりと職人技(辛い) 49 設定例
50.
C. キャリブレーション 50
51.
キャリブレーション 初回起動時に、ユーザーの嗜好を取得して記事を表示 51
52.
キャリブレーションの流れ 1. ユーザーの好きなカテゴリから、好きそ うなキーワード群とそれぞれの重みを算 出 2. 一部をユーザーがオプトアウトし、最終 的な”taste”とする 3.
tasteをESに投げ、初回記事を生成 4. 類似記事の排除をして記事確定 (詳細は略) 52
53.
キャリブレーション(クエリ) 53 1. tasteをbool query化 •
boost値はキーワード ごとのスコア(重み) • boost値が高いタグが たくさんマッチする記 事はスコアが高い
54.
キャリブレーション(クエリ) 54 2. 最新度, 記事のPV数など で最終スコア調整 3.
各種フィルタを通し、ス コアが高い順に返す
55.
簡易リコメンドまで出来る僥倖…! 55
56.
その他 56
57.
その他活用箇所 • ユーザーアクティビティをESに入れて、 Kibanaで見たり人気記事を算出したり • APIアクセスログのES化 (これはBigQueryにするかも) 57
58.
まとめ 58
59.
ES便利、だけど • 検索、関連記事、ちょっとしたリコメンド …いろいろできる! • でも少し込み入ったことをするには沢山考 えることがあって辛い時もある •
やっぱりサービス作りは、ユーザーのた めに泥臭く畑を耕すこと 59
60.
その他ESへの雑感 • 速度面や安定性は流石の一言 • GCによるCPUがあれですが •
機能が豊富すぎてびびる • 細かいパラメーターチューニングができる分、凝りだすと逆に 辛い • 公式ドキュメントのクエリ解説は正直わかりにくい • レスポンスが書いてなかったりなど • SQLに慣れすぎた人類には早かった 60
61.
おわり 61 @mosa_siru