Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
若手バックエンドエンジニアが Elasticsearch を使ってみた話
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Tomohiro Hotta
February 26, 2025
Programming
390
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
若手バックエンドエンジニアが Elasticsearch を使ってみた話
Tomohiro Hotta
February 26, 2025
Other Decks in Programming
See All in Programming
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
290
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
590
Workers Cache を知る
syumai
0
360
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
490
contenteditable と日本語入力に向き合う
colorful12
0
190
Simple Storage Service(S3) is not simple
iwatsukayura
0
280
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
250
phperだってパンチカードでコーディングしたい
o0h
PRO
0
300
ジョジョの世界をXRで再現する
mofurune
0
160
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
360
残高管理から台帳サービスへの進化
artoy
1
200
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
550
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
360
Rails Girls Zürich Keynote
gr2m
96
14k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
Ruling the World: When Life Gets Gamed
codingconduct
0
400
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
We Are The Robots
honzajavorek
0
400
Transcript
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
1 若手バックエンドエンジニアが Elasticsearch を使ってみた話 2025 February 26th 株式会社AbemaTV 堀田 朋宏 Elasticsearch Community in Tokyo 2025
AbemaTV, Inc. All Rights Reserved 堀田 朋宏 • 2023年、株式会社AbemaTVに
バックエンドエンジニアとして新卒入社 • 業務 ◦ 課金関連機能のバックエンド開発 ◦ 検索機能のバックエンド開発 • 技術 ◦ Go, Kubernetes, Elasticsearch • X:@hott0mott0 2 Profile Tomohiro Hotta
AbemaTV, Inc. All Rights Reserved 3 1. ABEMA の検索について a.
検索機能の概要 b. 検索における ABEMA 特有の課題 2. Elasticsearch との出会い 3. 取り組んだ改善事例 4. 検索システムの開発で学んだこと INDEX
AbemaTV, Inc. All Rights Reserved ABEMA の検索について 4
AbemaTV, Inc. All Rights Reserved ABEMA の検索について 5 ABEMA の検索における機能は以下の2種類。
• 全文検索 • ワード補完 • ABEMA で配信しているアニメ、スポーツ、バラエティなど、幅 広いジャンルのコンテンツを検索できる。 • Elastic Cloud を利用して実現している。 ~検索機能の概要 ~
AbemaTV, Inc. All Rights Reserved ABEMA の検索について 6 ABEMAの検索システムで検索対象となるデータ は多岐に渡る
• シリーズ • シーズン • エピソード • 放送枠 • ライブ (生配信) • ペイパービュー etc… ~検索機能の概要 ~
AbemaTV, Inc. All Rights Reserved ABEMA の検索について 7 • また、作品名だけでなく、以下のような要素も考慮しなければならない
◦ 作品の詳細 ◦ キャストの名前 ◦ 無料コンテンツか有料コンテンツか ◦ 現在放送中か ◦ 作品のジャンル etc… ~検索機能の概要 ~
AbemaTV, Inc. All Rights Reserved ABEMA の検索について 8 • ABEMA
は 他の OTT サービスと違い、「テレビ」としての側面を 持つ。 • ABEMA で放送されている「ABEMA NEWS」というものがある。 • ニュースのデータ構造は、「ニュース」というシリーズに、一つ一つのニュー スがエピソードとして紐づく。 ~検索における ABEMA 特有の課題 ~ ニュースのスコアが高くなる問題
AbemaTV, Inc. All Rights Reserved ABEMA の検索について 9 • シリーズを検索する際の対象となる
Index には、 シリーズ配下の全てのエピソードの情報も含まれ ている。 • 一般的にアニメ等は 1 シリーズに対して 12~24 エピソードくらいになり、 バラエティでも何百という単位。 • ニュース系のシリーズだけエピソード数が 1 万を超えてくる。 ~検索における ABEMA 特有の課題 ~
AbemaTV, Inc. All Rights Reserved ABEMA の検索について 10 1. 紐づくエピソードの数が多いシリーズのスコアがそもそも高くなりやすい。
◦ 膨大なエピソードの中の1件のタイトルにヒットした場合 ◦ IDF値が他のシリーズより大きく上回ってしまう。 2. ニュースは様々な話題を取り扱うため、まったく関係ないと思われるワードで も、どれかのエピソードのタイトルにヒットしてしまう可能性がある。 ◦ 1 の状況に陥りやすい。 ~検索における ABEMA 特有の課題 ~
AbemaTV, Inc. All Rights Reserved ABEMA の検索について 11 • 例えば、アイドルや芸能人の名前でシリーズを検索して、その人が出演して
いる作品を探そうとすると、、、 • ニュースのスコアが高くなり、上位表示されてしまう可能性がある • そのためシリーズ検索においては、ニュースはスコアが下がるようにして、出 演している作品のシリーズが上位に出るように調整しなければならない ~検索における ABEMA 特有の課題 ~
AbemaTV, Inc. All Rights Reserved ABEMA の検索について 12 • ABEMAではコンテンツ種別ごとに
Index を分けている。 • そして、ES のスコアは Index ごとの データ数にも依存する。 • そのため、Index 単位では意図した 検索結果になっても、一つの検索処理で 複数の Index にクエリを実行し、 その結果を組み合わせたりすると、 検索結果が意図しない順番になる可能性があ る。 ~検索における ABEMA 特有の課題 ~ シリーズ・シーズン検索の問題
AbemaTV, Inc. All Rights Reserved ABEMA の検索について 13 • ABEMAではシリーズ・シーズンをまとめて検索している。
• シリーズの方が総データ件数が圧倒的に多いため、シーズンよりもシリーズ のスコアの方が高く出てしまう。 ◦ これも IDF値の差異により発生。 • 例えば、「今日好き」は本編をシーズン単位でインデクシングしているため、 シーズンを上位に出したい。 • しかし、番外編のシリーズが上位にきてしまうということも起こりうる。 ~検索における ABEMA 特有の課題 ~
AbemaTV, Inc. All Rights Reserved Elasticsearch との出会い 14
AbemaTV, Inc. All Rights Reserved Elasticsearch との出会い 15 • 検索機能がどのように作られているのか漠
然とした興味があった。 • ちょうどチーム異動があり、 検索機能も担当するチームに異動した。 • 「いい機会だし、検索やってみたい」 次のタスク何やりたい?> <検索やってみたいです! おk!>
AbemaTV, Inc. All Rights Reserved Elasticsearch との出会い 16 • 検索機能の実装を追ってみる。
• Elasticsearch へのリクエストを送っている箇所を発見。 • ここから Elasticsearch との付き合いが始まった。
AbemaTV, Inc. All Rights Reserved 取り組んだ改善事例 17
AbemaTV, Inc. All Rights Reserved 取り組んだ改善事例 18 • 「ABEMA 的ニュースショー」という番組があり、これに対して「あべま的」というよ
うなワードで検索するとヒットしない ◦ それどころか「ABEMA」という文字が入っている番組がほとんどヒットしない • 「孤独のぐるめ」と入力しても「孤独のグルメ」がヒットしない 課題
AbemaTV, Inc. All Rights Reserved 取り組んだ改善事例 19 • このような読み仮名の検索ワードに対しては、コンテンツ名の読み仮名もインデク シングに含めることでヒットさせていた。
◦ 上記の入稿は人の手で行っている。 • 「ABEMA 的ニュースショー」のABEMAの部分は入稿された読み仮名もアルファ ベットだった。 ◦ 検索ワードがひらがななのでそもそもヒットしない。
AbemaTV, Inc. All Rights Reserved 取り組んだ改善事例 20 • ES の
Token Filter に kuromoji_readingform という Filter がある。 ◦ これを用いることで、Tokenize したコンテンツ名や検索ワードを 読み仮名に変換することができる。 ◦ use_romaji フィールドを True にすることで、読み仮名をローマ字に変換す ることができる。 • これを以下のフィールドに適用した。 ◦ コンテンツのタイトル ◦ コンテンツのタイトルの読み仮名 アプローチ
AbemaTV, Inc. All Rights Reserved 取り組んだ改善事例 21 • 「あべま的」という検索ワードを入力すると、それが「a be
ma teki」と変換され、 「ABEMA 的ニュースショー」がヒットするようになった。 ◦ ABEMA の部分にヒットするようになった。 • 「孤独のぐるめ」と入力すると「孤独のグルメ」がヒットするように なった。 • 「shikujiri」と入力すると「しくじり先生」がヒットするようになった。 ◦ ローマ字表記もある程度カバーできるようになった。 結果
AbemaTV, Inc. All Rights Reserved 検索システムの開発で学んだこと 22
AbemaTV, Inc. All Rights Reserved 検索システムの開発で学んだこと 23 • Elasticsearch の
Index はデータベースと似ている。 ◦ NoSQL と近い • バックエンドエンジニアからすると、ES のクエリの書き方に慣れるのに苦労 した。 ◦ スキーマが決まっているというより、JSON で AND や OR などの条件 を表して検索条件を組み立てるところ • 「ABEMA」など、サービス特有のコンテキストが入った文字列を検索対象に すると、ヒットさせるのが難しい • あるコンテンツがヒットしないという課題を解決する際、他のコンテンツがヒッ トしなくなるといったことが起こらないよう気を配る必要がある。
AbemaTV, Inc. All Rights Reserved ご清聴ありがとうございました 24
AbemaTV, Inc. All Rights Reserved