AbemaTV, Inc. All Rights Reserved
AbemaTV, Inc. All Rights Reserved 1
若手バックエンドエンジニアが
Elasticsearch を使ってみた話
2025 February 26th 株式会社AbemaTV
堀田 朋宏
Elasticsearch Community in Tokyo 2025
Slide 2
Slide 2 text
AbemaTV, Inc. All Rights Reserved
堀田 朋宏
● 2023年、株式会社AbemaTVに
バックエンドエンジニアとして新卒入社
● 業務
○ 課金関連機能のバックエンド開発
○ 検索機能のバックエンド開発
● 技術
○ Go, Kubernetes, Elasticsearch
● X:@hott0mott0
2
Profile
Tomohiro Hotta
Slide 3
Slide 3 text
AbemaTV, Inc. All Rights Reserved 3
1. ABEMA の検索について
a. 検索機能の概要
b. 検索における ABEMA 特有の課題
2. Elasticsearch との出会い
3. 取り組んだ改善事例
4. 検索システムの開発で学んだこと
INDEX
Slide 4
Slide 4 text
AbemaTV, Inc. All Rights Reserved
ABEMA の検索について
4
Slide 5
Slide 5 text
AbemaTV, Inc. All Rights Reserved
ABEMA の検索について
5
ABEMA の検索における機能は以下の2種類。
● 全文検索
● ワード補完
● ABEMA で配信しているアニメ、スポーツ、バラエティなど、幅
広いジャンルのコンテンツを検索できる。
● Elastic Cloud を利用して実現している。
~検索機能の概要 ~
Slide 6
Slide 6 text
AbemaTV, Inc. All Rights Reserved
ABEMA の検索について
6
ABEMAの検索システムで検索対象となるデータ
は多岐に渡る
● シリーズ
● シーズン
● エピソード
● 放送枠
● ライブ (生配信)
● ペイパービュー
etc…
~検索機能の概要 ~
Slide 7
Slide 7 text
AbemaTV, Inc. All Rights Reserved
ABEMA の検索について
7
● また、作品名だけでなく、以下のような要素も考慮しなければならない
○ 作品の詳細
○ キャストの名前
○ 無料コンテンツか有料コンテンツか
○ 現在放送中か
○ 作品のジャンル
etc…
~検索機能の概要 ~
Slide 8
Slide 8 text
AbemaTV, Inc. All Rights Reserved
ABEMA の検索について
8
● ABEMA は 他の OTT サービスと違い、「テレビ」としての側面を
持つ。
● ABEMA で放送されている「ABEMA NEWS」というものがある。
● ニュースのデータ構造は、「ニュース」というシリーズに、一つ一つのニュー
スがエピソードとして紐づく。
~検索における ABEMA 特有の課題 ~
ニュースのスコアが高くなる問題
Slide 9
Slide 9 text
AbemaTV, Inc. All Rights Reserved
ABEMA の検索について
9
● シリーズを検索する際の対象となる Index には、
シリーズ配下の全てのエピソードの情報も含まれ
ている。
● 一般的にアニメ等は 1 シリーズに対して
12~24 エピソードくらいになり、
バラエティでも何百という単位。
● ニュース系のシリーズだけエピソード数が
1 万を超えてくる。
~検索における ABEMA 特有の課題 ~
Slide 10
Slide 10 text
AbemaTV, Inc. All Rights Reserved
ABEMA の検索について
10
1. 紐づくエピソードの数が多いシリーズのスコアがそもそも高くなりやすい。
○ 膨大なエピソードの中の1件のタイトルにヒットした場合
○ IDF値が他のシリーズより大きく上回ってしまう。
2. ニュースは様々な話題を取り扱うため、まったく関係ないと思われるワードで
も、どれかのエピソードのタイトルにヒットしてしまう可能性がある。
○ 1 の状況に陥りやすい。
~検索における ABEMA 特有の課題 ~
Slide 11
Slide 11 text
AbemaTV, Inc. All Rights Reserved
ABEMA の検索について
11
● 例えば、アイドルや芸能人の名前でシリーズを検索して、その人が出演して
いる作品を探そうとすると、、、
● ニュースのスコアが高くなり、上位表示されてしまう可能性がある
● そのためシリーズ検索においては、ニュースはスコアが下がるようにして、出
演している作品のシリーズが上位に出るように調整しなければならない
~検索における ABEMA 特有の課題 ~
Slide 12
Slide 12 text
AbemaTV, Inc. All Rights Reserved
ABEMA の検索について
12
● ABEMAではコンテンツ種別ごとに
Index を分けている。
● そして、ES のスコアは Index ごとの
データ数にも依存する。
● そのため、Index 単位では意図した
検索結果になっても、一つの検索処理で
複数の Index にクエリを実行し、
その結果を組み合わせたりすると、
検索結果が意図しない順番になる可能性があ
る。
~検索における ABEMA 特有の課題 ~
シリーズ・シーズン検索の問題
Slide 13
Slide 13 text
AbemaTV, Inc. All Rights Reserved
ABEMA の検索について
13
● ABEMAではシリーズ・シーズンをまとめて検索している。
● シリーズの方が総データ件数が圧倒的に多いため、シーズンよりもシリーズ
のスコアの方が高く出てしまう。
○ これも IDF値の差異により発生。
● 例えば、「今日好き」は本編をシーズン単位でインデクシングしているため、
シーズンを上位に出したい。
● しかし、番外編のシリーズが上位にきてしまうということも起こりうる。
~検索における ABEMA 特有の課題 ~
Slide 14
Slide 14 text
AbemaTV, Inc. All Rights Reserved
Elasticsearch との出会い
14
Slide 15
Slide 15 text
AbemaTV, Inc. All Rights Reserved
Elasticsearch との出会い
15
● 検索機能がどのように作られているのか漠
然とした興味があった。
● ちょうどチーム異動があり、
検索機能も担当するチームに異動した。
● 「いい機会だし、検索やってみたい」
次のタスク何やりたい?>
<検索やってみたいです!
おk!>
Slide 16
Slide 16 text
AbemaTV, Inc. All Rights Reserved
Elasticsearch との出会い
16
● 検索機能の実装を追ってみる。
● Elasticsearch へのリクエストを送っている箇所を発見。
● ここから Elasticsearch との付き合いが始まった。
Slide 17
Slide 17 text
AbemaTV, Inc. All Rights Reserved
取り組んだ改善事例
17
Slide 18
Slide 18 text
AbemaTV, Inc. All Rights Reserved
取り組んだ改善事例
18
● 「ABEMA 的ニュースショー」という番組があり、これに対して「あべま的」というよ
うなワードで検索するとヒットしない
○ それどころか「ABEMA」という文字が入っている番組がほとんどヒットしない
● 「孤独のぐるめ」と入力しても「孤独のグルメ」がヒットしない
課題
Slide 19
Slide 19 text
AbemaTV, Inc. All Rights Reserved
取り組んだ改善事例
19
● このような読み仮名の検索ワードに対しては、コンテンツ名の読み仮名もインデク
シングに含めることでヒットさせていた。
○ 上記の入稿は人の手で行っている。
● 「ABEMA 的ニュースショー」のABEMAの部分は入稿された読み仮名もアルファ
ベットだった。
○ 検索ワードがひらがななのでそもそもヒットしない。
Slide 20
Slide 20 text
AbemaTV, Inc. All Rights Reserved
取り組んだ改善事例
20
● ES の Token Filter に kuromoji_readingform という Filter がある。
○ これを用いることで、Tokenize したコンテンツ名や検索ワードを
読み仮名に変換することができる。
○ use_romaji フィールドを True にすることで、読み仮名をローマ字に変換す
ることができる。
● これを以下のフィールドに適用した。
○ コンテンツのタイトル
○ コンテンツのタイトルの読み仮名
アプローチ
Slide 21
Slide 21 text
AbemaTV, Inc. All Rights Reserved
取り組んだ改善事例
21
● 「あべま的」という検索ワードを入力すると、それが「a be ma teki」と変換され、
「ABEMA 的ニュースショー」がヒットするようになった。
○ ABEMA の部分にヒットするようになった。
● 「孤独のぐるめ」と入力すると「孤独のグルメ」がヒットするように
なった。
● 「shikujiri」と入力すると「しくじり先生」がヒットするようになった。
○ ローマ字表記もある程度カバーできるようになった。
結果
Slide 22
Slide 22 text
AbemaTV, Inc. All Rights Reserved
検索システムの開発で学んだこと
22
Slide 23
Slide 23 text
AbemaTV, Inc. All Rights Reserved
検索システムの開発で学んだこと
23
● Elasticsearch の Index はデータベースと似ている。
○ NoSQL と近い
● バックエンドエンジニアからすると、ES のクエリの書き方に慣れるのに苦労
した。
○ スキーマが決まっているというより、JSON で AND や OR などの条件
を表して検索条件を組み立てるところ
● 「ABEMA」など、サービス特有のコンテキストが入った文字列を検索対象に
すると、ヒットさせるのが難しい
● あるコンテンツがヒットしないという課題を解決する際、他のコンテンツがヒッ
トしなくなるといったことが起こらないよう気を配る必要がある。
Slide 24
Slide 24 text
AbemaTV, Inc. All Rights Reserved
ご清聴ありがとうございました
24