Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
若手バックエンドエンジニアが Elasticsearch を使ってみた話
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
510
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
410
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
730
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.8k
AIエージェント時代のコードレビューを設計する
nogu66
5
1.2k
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
730
リアルな遅延を測る仕様
kota_yata
1
130
高専、大学編入、そして未踏へ〜プロダクト開発とキャリアの歩み - Technical College, University Transfer, and On to “Mitou” / My Journey in Product Development and Career
pkmiya
0
120
Deep dive into the select statement (GopherCon UK)
jespino
0
160
高専キャリア LT 発表内容
crysta1221
6
5.4k
typoなんかねぇよ
raspython3
0
640
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
2
920
Featured
See All Featured
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
220
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
760
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The Curse of the Amulet
leimatthew05
2
14k
Color Theory Basics | Prateek | Gurzu
gurzu
0
450
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
270
The SEO identity crisis: Don't let AI make you average
varn
0
550
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
320
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