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

Elasticsearchで作るメディアサイト

 Elasticsearchで作るメディアサイト

体験メディアサイトYOKKA (よっか) のES活用例紹介
第41回Elasticsearch勉強会
2021.04.22 #elasticsearchjp

Kunihiko Kido

April 22, 2021
Tweet

More Decks by Kunihiko Kido

Other Decks in Technology

Transcript

  1. • 木戸国彦(キド クニヒコ) ◦ ベルトラ株式会社 / Product & Technology Div

    / PDM & UX Dept Manager • これまでの検索エンジンとの関わり ◦ 2004 FAST Enterprise Search Platform (FAST ESP) の日本国内企業へ導入支援 [System] ◦ 2007 Saas型のサイト内検索サービス事業立ち上げ [System] ◦ 2007 〜 2015 不動産、家電量販店など大手 ECポータル向けに商品検索企画・開発 [UI/UX] ◦ 2011 サイト内検索サービスをクラウドへ移行 [System] ◦ 2014 クラウド型のサイト内検索サービスを Elasticsearchへ [System] ◦ 2014 Hello! Elasticsearch ブログ公開開始 [Blog] ◦ 2015 自然言語研究者向けに SNSの分析基盤企画・開発 [System] ◦ 2016 オムニチャネル向け ECプラットフォームのサーチアドバイザー [System] ◦ 2017 [ベルトラ]カスタマーサポートの生産性向上( Elastic{On} で登壇) [Productivity/Analytics] ◦ 2018 [ベルトラ] サポートサイトを Elasticsearchベースでリニューアルし問合せ率削減に貢献 [UI/UX] ◦ 2019 〜 2020 [ベルトラ] 情報利活用におけるサービス企画開発 [UI/UX/Analytics] ◦ 2021 [ベルトラ] メディア新規事業企画・開発 [UI/UX] 自己紹介 @9215
  2. もくじ • はじめに • なぜ Elasticsearch を使うのか? • YOKKA (よっか)

    の Elasticsearch 活用例 • メリット・デメリット • こんな使い方も(YOKKAではないですが) • さいごに(お知らせ)
  3. サイトナビゲーションのための階層構造はデータ 管理には不要なためシンプルに保てる 階層構造を管理する管理者が不要、データ移行や再利用もしやすいメリットがある データ管理をシンプルに保ちたい 記事 スラッグ コンテンツ 国 スラッグ 名前

    地域 スラッグ 名前 1 * * * * * 記事 スラッグ コンテンツ 国 スラッグ 名前 地域 スラッグ 名前 * * * * ビジネス要件RDB、データ管理RDB のデータ管理設計例 ビジネス要件Elasticsearch、データ管理RDB のデータ管理設計例 サイトナビゲーションのための階層構造など複 雑になっていく ◀国にしか関連づけない データも
  4. UXのビジネス要件を柔軟に実現したい 記事 スラッグ コンテンツ 国 スラッグ 名前 地域 スラッグ 名前

    * * * * 著者 名前 1 * ツリー ファセット ハイパーリンク ウィザード {Elasticsearch} シンプルなデータ構造 Elasticsearch を使うと Aggregations を使ってデータ構造を 買えずに様々なナビゲーションを実現できる
  5. Elasticsearch のスコアリングを使って 柔軟に掲載順いをコントロール 曖昧なビジネスニーズに対応、チューニングできるようにしたい サイト利用者のニーズ • 同じような内容なら新しい情報を知りたい • 他の人がよく調べる情報は自分も知りたい •

    趣味思考にあった情報をおすすめしてほしい サイト運営者のニーズ • タイアップ記事(PR)を読んでもらいたい 「いい感じにしてね^^;」 <曖昧なビジネスニーズ> <Elasticsearchのスコアリング> 鮮度 公開日付を基準にスコアリング 人気 いいね数のスコアリング プロモーション プロモーションかどうかのスコアリング Weight 60 % Weight 25 % Weight 10 % Weight 40 % Weight 50 % Weight 10 % Weight 30 % Weight 50 % Weight 10 % 趣味思考 趣味思考を表すキーワードがマッチするかどうかスコアリン グ Weight 5 % Weight 0 % Weight 10 %
  6. 検索エンジンの適用範囲 Keyword Search result pages 検索エンジンと言うと検索結果 ページを思い浮かべるが、、 Keyword Search result

    pages TOP/Category pages Navigations Going out Hobby Travel サイト内のコンテンツ一覧、各種ナビゲーションは Elasticsearchを使って ます。※現在は記事がメインの情報のみ
  7. おすすめ順=Function score query でスコアを調整 { "functions": [ { "filter": {

    "term": {"is_promotion": true} }, "weight": 0.1 }, { "field_value_factor": { "field": "likes", "factor": 1, "modifier": "log1p" }, "weight": 0.3 }, { "exp": { "pub_date": { "origin": "now", "scale": "10d", "offset": "3d", "decay": 0.8 } }, "weight": 0.6 } ], "score_mode": "sum", "boost_mode": "replace" } プロモーションかどうか のスコアリング いいね数の スコアリング 記事の公開日時 のスコアリング
  8. Function score の結果スコアを利用する { "aggs": { "authors": { "terms": {

    "field": "author.nav", "size": "7", "order": [ {"max_score": "desc"}, {"_count": "desc"}, {"_key": "asc"} ] }, "aggs": { "max_score": { "max": { "script": {"source": "_score"} } } } } } } Function score query で得た スコアをMax aggregationで各 種ナビゲーションの並び順に利 用する スコアの高いおすすめの記事 が含まれている各種項目(タ グ、著者、エリア)でナビゲー ションを提供
  9. ネストしたナビゲーション例 ❶ リージョンのナビゲーション 全ての記事群からTerms aggregation でエリアを 集計してナビゲーションを生成。 管理サイトで指定された順に掲載。 ❷ 国・地域のナビゲーション

    各リージョン毎の記事群から Terms aggregationで 国・地域を集計してナビゲーションを生成。 Function score query のスコアを使って国・地域の 並び順を最適化(鮮度+人気+プロモ)。 エリア一覧ページ ❶ ❷
  10. # Article document { “slug”: “roadbike-first-time”, “title”: “初心者でも簡単に始められる ....” “country”:

    { “nav”: “000002#japan#日本国内”, ... } } ナビゲーション生成のための非正規化 ひとつのAggregationで集計できるのは一つのフィールド。非正規化した方が使い勝手が良い 初心者ロードバイク: Article slug = roadbike-first-time title = 初心者でも ... 日本国内: Country slug = japan order = 2 name = 日本国内 【非正規化パターン】 ❶ 任意の並び順で表示する可能性が あるもの “{ order }#{ slug }#{ name }” エリア、カテゴリ、etc ❷ 任意の並び順で表示する可能性の ないもの “{ slug }#{ name }” タグ、etc ❸ 表示もURLも同じもの “{ name }”
  11. Terms aggregation ネストしたナビゲーションの応用例 特集・連載一覧 Top hits aggregation Function score query

    スコア Function score query スコア 特集・連載ごとに集計 特集・連載ごとに記事を掲載 「特集・連載一覧」クエリー
  12. フリーワード検索 • 漏れを少なくするため OR 検索をベースに設計 ◦ minimum_should_match を 60% にして、少ない単語数では、適合

    率を重視 • 将来多言語対応を考慮して、 ICU アナライザーをベー スに言語処理を設計 ◦ 適合率<再現率という方針なので言語固有のアナライザーを採用し てません。 • カタカナキーワードはフレーズ検索するようにして適 合率を向上 ◦ ICUアナライザーは未知の単語は細かくトークナイズされる傾向なた め、フレーズで検索するようにしています。 • おすすめ順スコア+キーワードマッチ度スコアで掲載 順位を決定 ◦ 再現率重視のためおすすめ順のスコアを考慮すると不自然な検索結 果になってしまうため、現在はキーワードのマッチ度のみに変更して ます
  13. メリット • データ管理をシンプルに保てる • 柔軟にUXのビジネス要件を実現できる • ビジネス要件を簡単にチューニングできる • バッチ処理が少なくて済む •

    リクエストして単純に表示するだけなのでUIの開発が簡単 ◦ Elasticsearch のクエリー: ビジネスロジック ◦ アプリケーション: ただ表示するするだけ
  14. Indices {Elasticsearch} ❸ いずれかの不適切投 稿検出条件がマッチした 場合は不適切投稿と判 断する Percolate query を使って不適切投稿を検知する

    INDEX SIDE (Admin side) SEARCH SIDE (Application side) 検索条件 検索条件 検索条件 検索条件 {Percolator query} ❶ 不適切投稿を検出するための 検索条件群を事前に登録する 登録 投稿内容 {doc} 検索 検索条件 結果 検索条件 {Percolator query} ❷ 投稿内容を検索条件 として検索する 管理者 投稿者 参考: Elasticsearchで不適切投稿のバリデーションチェックを実装してみた話 参考: Percolate query | Elasticsearch Guide
  15. https://file.veltra.com/jp/promotion/se kai-no-gohan-at-home/ 世界各国の本格料理をご自宅 で楽しみませんか? 日本食レシピサイト。海外のな お友達に紹介してください https://umami-recipe.com/ 広告、タイアップなどビジネス向けの 相談は [email protected]

    まで ご連絡ください。 https://www.veltra.com/jp/yokka/ まだ間に合う! ゴールデンウィークのおともに、 https://file.veltra.com/jp/promotion/onl ineacademy/ 心揺さぶる体験をオンラインで お届け