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

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

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

Avatar for Tomohiro Hotta

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」など、サービス特有のコンテキストが入った文字列を検索対象に すると、ヒットさせるのが難しい • あるコンテンツがヒットしないという課題を解決する際、他のコンテンツがヒッ トしなくなるといったことが起こらないよう気を配る必要がある。