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
Tomohiro Hotta
February 26, 2025
Programming
380
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
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
260
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.8k
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
550
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
170
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
260
源内ハンズオン概要編
hideg
0
170
プロポーザルを書いてもらう
pvcresin
0
500
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
180
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
360
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
650
freeeにおけるEvalsの実践例の紹介
freee
PRO
0
110
Featured
See All Featured
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
460
Speed Design
sergeychernyshev
33
2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
660
The agentic SEO stack - context over prompts
schlessera
0
860
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.1k
sira's awesome portfolio website redesign presentation
elsirapls
0
320
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
570
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Thoughts on Productivity
jonyablonski
76
5.3k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
490
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