Upgrade to Pro — share decks privately, control downloads, hide ads and more …

若手バックエンドエンジニアが Elasticsearch を使ってみた話

若手バックエンドエンジニアが Elasticsearch を使ってみた話

Tomohiro Hotta

February 26, 2025
Tweet

Other Decks in Programming

Transcript

  1. AbemaTV, Inc. All Rights Reserved
 AbemaTV, Inc. All Rights Reserved


    1 若手バックエンドエンジニアが Elasticsearch を使ってみた話 2025 February 26th 
 株式会社AbemaTV 堀田 朋宏 Elasticsearch Community in Tokyo 2025 

  2. AbemaTV, Inc. All Rights Reserved
 堀田 朋宏 • 2023年、株式会社AbemaTVに 


    バックエンドエンジニアとして新卒入社 
 • 業務
 ◦ 課金関連機能のバックエンド開発 
 ◦ 検索機能のバックエンド開発 
 • 技術
 ◦ Go, Kubernetes, Elasticsearch 
 • X:@hott0mott0
 2 Profile Tomohiro Hotta
  3. AbemaTV, Inc. All Rights Reserved
 3 1. ABEMA の検索について a.

    検索機能の概要 b. 検索における ABEMA 特有の課題 2. Elasticsearch との出会い 3. 取り組んだ改善事例 4. 検索システムの開発で学んだこと INDEX
  4. AbemaTV, Inc. All Rights Reserved
 ABEMA の検索について 5 ABEMA の検索における機能は以下の2種類。

    • 全文検索 • ワード補完 • ABEMA で配信しているアニメ、スポーツ、バラエティなど、幅 広いジャンルのコンテンツを検索できる。 • Elastic Cloud を利用して実現している。 ~検索機能の概要 ~
  5. AbemaTV, Inc. All Rights Reserved
 ABEMA の検索について 6 ABEMAの検索システムで検索対象となるデータ は多岐に渡る

    • シリーズ • シーズン • エピソード • 放送枠 • ライブ (生配信) • ペイパービュー etc… ~検索機能の概要 ~
  6. AbemaTV, Inc. All Rights Reserved
 ABEMA の検索について 7 • また、作品名だけでなく、以下のような要素も考慮しなければならない

    ◦ 作品の詳細 ◦ キャストの名前 ◦ 無料コンテンツか有料コンテンツか ◦ 現在放送中か ◦ 作品のジャンル etc… ~検索機能の概要 ~
  7. AbemaTV, Inc. All Rights Reserved
 ABEMA の検索について 8 • ABEMA

    は 他の OTT サービスと違い、「テレビ」としての側面を 持つ。 • ABEMA で放送されている「ABEMA NEWS」というものがある。 • ニュースのデータ構造は、「ニュース」というシリーズに、一つ一つのニュー スがエピソードとして紐づく。 ~検索における ABEMA 特有の課題 ~ ニュースのスコアが高くなる問題
  8. AbemaTV, Inc. All Rights Reserved
 ABEMA の検索について 9 • シリーズを検索する際の対象となる

    Index には、 シリーズ配下の全てのエピソードの情報も含まれ ている。 • 一般的にアニメ等は 1 シリーズに対して 12~24 エピソードくらいになり、 バラエティでも何百という単位。 • ニュース系のシリーズだけエピソード数が 1 万を超えてくる。 ~検索における ABEMA 特有の課題 ~
  9. AbemaTV, Inc. All Rights Reserved
 ABEMA の検索について 10 1. 紐づくエピソードの数が多いシリーズのスコアがそもそも高くなりやすい。

    ◦ 膨大なエピソードの中の1件のタイトルにヒットした場合 ◦ IDF値が他のシリーズより大きく上回ってしまう。 2. ニュースは様々な話題を取り扱うため、まったく関係ないと思われるワードで も、どれかのエピソードのタイトルにヒットしてしまう可能性がある。 ◦ 1 の状況に陥りやすい。 ~検索における ABEMA 特有の課題 ~
  10. AbemaTV, Inc. All Rights Reserved
 ABEMA の検索について 11 • 例えば、アイドルや芸能人の名前でシリーズを検索して、その人が出演して

    いる作品を探そうとすると、、、 • ニュースのスコアが高くなり、上位表示されてしまう可能性がある • そのためシリーズ検索においては、ニュースはスコアが下がるようにして、出 演している作品のシリーズが上位に出るように調整しなければならない ~検索における ABEMA 特有の課題 ~
  11. AbemaTV, Inc. All Rights Reserved
 ABEMA の検索について 12 • ABEMAではコンテンツ種別ごとに

    Index を分けている。 • そして、ES のスコアは Index ごとの データ数にも依存する。 • そのため、Index 単位では意図した 検索結果になっても、一つの検索処理で 複数の Index にクエリを実行し、 その結果を組み合わせたりすると、 検索結果が意図しない順番になる可能性があ る。 ~検索における ABEMA 特有の課題 ~ シリーズ・シーズン検索の問題
  12. AbemaTV, Inc. All Rights Reserved
 ABEMA の検索について 13 • ABEMAではシリーズ・シーズンをまとめて検索している。

    • シリーズの方が総データ件数が圧倒的に多いため、シーズンよりもシリーズ のスコアの方が高く出てしまう。 ◦ これも IDF値の差異により発生。 • 例えば、「今日好き」は本編をシーズン単位でインデクシングしているため、 シーズンを上位に出したい。 • しかし、番外編のシリーズが上位にきてしまうということも起こりうる。 ~検索における ABEMA 特有の課題 ~
  13. AbemaTV, Inc. All Rights Reserved
 Elasticsearch との出会い 15 • 検索機能がどのように作られているのか漠

    然とした興味があった。 • ちょうどチーム異動があり、 検索機能も担当するチームに異動した。 • 「いい機会だし、検索やってみたい」 次のタスク何やりたい?> <検索やってみたいです! おk!>
  14. AbemaTV, Inc. All Rights Reserved
 Elasticsearch との出会い 16 • 検索機能の実装を追ってみる。

    • Elasticsearch へのリクエストを送っている箇所を発見。 • ここから Elasticsearch との付き合いが始まった。
  15. AbemaTV, Inc. All Rights Reserved
 取り組んだ改善事例 18 • 「ABEMA 的ニュースショー」という番組があり、これに対して「あべま的」というよ

    うなワードで検索するとヒットしない ◦ それどころか「ABEMA」という文字が入っている番組がほとんどヒットしない • 「孤独のぐるめ」と入力しても「孤独のグルメ」がヒットしない 課題
  16. AbemaTV, Inc. All Rights Reserved
 取り組んだ改善事例 19 • このような読み仮名の検索ワードに対しては、コンテンツ名の読み仮名もインデク シングに含めることでヒットさせていた。

    ◦ 上記の入稿は人の手で行っている。 • 「ABEMA 的ニュースショー」のABEMAの部分は入稿された読み仮名もアルファ ベットだった。 ◦ 検索ワードがひらがななのでそもそもヒットしない。
  17. AbemaTV, Inc. All Rights Reserved
 取り組んだ改善事例 20 • ES の

    Token Filter に kuromoji_readingform という Filter がある。 ◦ これを用いることで、Tokenize したコンテンツ名や検索ワードを 読み仮名に変換することができる。 ◦ use_romaji フィールドを True にすることで、読み仮名をローマ字に変換す ることができる。 • これを以下のフィールドに適用した。 ◦ コンテンツのタイトル ◦ コンテンツのタイトルの読み仮名 アプローチ
  18. AbemaTV, Inc. All Rights Reserved
 取り組んだ改善事例 21 • 「あべま的」という検索ワードを入力すると、それが「a be

    ma teki」と変換され、 「ABEMA 的ニュースショー」がヒットするようになった。 ◦ ABEMA の部分にヒットするようになった。 • 「孤独のぐるめ」と入力すると「孤独のグルメ」がヒットするように なった。 • 「shikujiri」と入力すると「しくじり先生」がヒットするようになった。 ◦ ローマ字表記もある程度カバーできるようになった。 結果
  19. AbemaTV, Inc. All Rights Reserved
 検索システムの開発で学んだこと 23 • Elasticsearch の

    Index はデータベースと似ている。 ◦ NoSQL と近い • バックエンドエンジニアからすると、ES のクエリの書き方に慣れるのに苦労 した。 ◦ スキーマが決まっているというより、JSON で AND や OR などの条件 を表して検索条件を組み立てるところ • 「ABEMA」など、サービス特有のコンテキストが入った文字列を検索対象に すると、ヒットさせるのが難しい • あるコンテンツがヒットしないという課題を解決する際、他のコンテンツがヒッ トしなくなるといったことが起こらないよう気を配る必要がある。