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
Kunihiko Kido
April 22, 2021
Technology
7
2.4k
Elasticsearchで作るメディアサイト
体験メディアサイトYOKKA (よっか) のES活用例紹介
第41回Elasticsearch勉強会
2021.04.22 #elasticsearchjp
Kunihiko Kido
April 22, 2021
Tweet
Share
More Decks by Kunihiko Kido
See All by Kunihiko Kido
emo.travel の紹介と Elasticsearch の活用について
kunihikokido
1
2k
VELTRA - Elastic{ON} Tour Tokyo 2017
kunihikokido
0
1.5k
Elasticsearch 勉強会 2/2
kunihikokido
1
1.5k
Elasticsearch 勉強会 1/2
kunihikokido
4
5.5k
Developers.IO 2016 C-2 「Elasticsearchで自由自在に検索・分析できるようになるためのヒント」
kunihikokido
7
2k
開発効率アップ!Elasticsearch Client Tool 作ってみた
kunihikokido
0
1.6k
はじめての Elasticsearch
kunihikokido
1
1.4k
Elasticsearch 日本語スキーマレス環境構築と、ついでに多言語対応
kunihikokido
5
7.8k
Other Decks in Technology
See All in Technology
強いチームと開発生産性
onk
PRO
35
11k
Platform Engineering for Software Developers and Architects
syntasso
1
520
OCI Network Firewall 概要
oracle4engineer
PRO
0
4.2k
SSMRunbook作成の勘所_20241120
koichiotomo
3
160
SRE×AIOpsを始めよう!GuardDutyによるお手軽脅威検出
amixedcolor
0
170
Engineer Career Talk
lycorp_recruit_jp
0
190
マルチモーダル / AI Agent / LLMOps 3つの技術トレンドで理解するLLMの今後の展望
hirosatogamo
37
12k
SREが投資するAIOps ~ペアーズにおけるLLM for Developerへの取り組み~
takumiogawa
1
430
アジャイルチームがらしさを発揮するための目標づくり / Making the goal and enabling the team
kakehashi
3
140
日経電子版のStoreKit2フルリニューアル
shimastripe
1
140
[CV勉強会@関東 ECCV2024 読み会] オンラインマッピング x トラッキング MapTracker: Tracking with Strided Memory Fusion for Consistent Vector HD Mapping (Chen+, ECCV24)
abemii
0
230
OCI Security サービス 概要
oracle4engineer
PRO
0
6.5k
Featured
See All Featured
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Optimizing for Happiness
mojombo
376
70k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
109
49k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
16
2.1k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
100
RailsConf 2023
tenderlove
29
900
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
24k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
Transcript
Elasticsearchで作る メディアサイト 体験メディアサイトYOKKA (よっか) のES活用例紹介 第41回Elasticsearch勉強会 2021.04.22 #elasticsearchjp Kunihiko Kido
@9215
• 木戸国彦(キド クニヒコ) ◦ ベルトラ株式会社 / 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
もくじ • はじめに • なぜ Elasticsearch を使うのか? • YOKKA (よっか)
の Elasticsearch 活用例 • メリット・デメリット • こんな使い方も(YOKKAではないですが) • さいごに(お知らせ)
はじめに
ベルトラについて 日本国内および世界 150ヵ国の観光ツアー、文化体験、グルメツアー、ショ ー・エンターテインメントチケット、アク ティビティ、クルーズ、スパ・エステ等を旅先で体験する、現地体験型オプショナルツアー専門のオンライン予約サイ ト「VELTRA.com」を運営しています。 12,000+ Activities Worldwide 4,000+
Partners 150 Countries 430,000 Customer Reviews 2 million + Members Worldwide 2021年4月現在
新たな体験や 趣味探しのアイデアを提案する 体験発信メディアサイト YOKKA “よっか” 2021年3月24日リリース 新しい自分に出会うため、 さあ、次の休日に「やってみよっか」 https://www.veltra.com/jp/yokka/
なぜ Elasticsearch を使うのか?
Elasticsearch を使う理由はこの3つ 1. データ管理をシンプルに保ちたい 2. UXのビジネス要件を柔軟に実現したい 3. 曖昧なビジネスニーズに対応、チューニングできるようにしたい
サイトナビゲーションのための階層構造はデータ 管理には不要なためシンプルに保てる 階層構造を管理する管理者が不要、データ移行や再利用もしやすいメリットがある データ管理をシンプルに保ちたい 記事 スラッグ コンテンツ 国 スラッグ 名前
地域 スラッグ 名前 1 * * * * * 記事 スラッグ コンテンツ 国 スラッグ 名前 地域 スラッグ 名前 * * * * ビジネス要件RDB、データ管理RDB のデータ管理設計例 ビジネス要件Elasticsearch、データ管理RDB のデータ管理設計例 サイトナビゲーションのための階層構造など複 雑になっていく ◀国にしか関連づけない データも
UXのビジネス要件を柔軟に実現したい 記事 スラッグ コンテンツ 国 スラッグ 名前 地域 スラッグ 名前
* * * * 著者 名前 1 * ツリー ファセット ハイパーリンク ウィザード {Elasticsearch} シンプルなデータ構造 Elasticsearch を使うと Aggregations を使ってデータ構造を 買えずに様々なナビゲーションを実現できる
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 %
YOKKA (よっか) の Elasticsearch 活用例
設計方針 あまり人の手を使った運用をせずに、記事の投稿状況やサイトでのユーザーアクション (いいね、など)によって、各種ページの掲載順位やナビゲーションをダイナミックに最適 化。将来的にはユーザーの趣味嗜好に合わせてサイト全体をパーソナライズできるよう にする。
検索エンジンの適用範囲 Keyword Search result pages 検索エンジンと言うと検索結果 ページを思い浮かべるが、、 Keyword Search result
pages TOP/Category pages Navigations Going out Hobby Travel サイト内のコンテンツ一覧、各種ナビゲーションは Elasticsearchを使って ます。※現在は記事がメインの情報のみ
❶ おすすめ順で記事を掲載
おすすめ順=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" } プロモーションかどうか のスコアリング いいね数の スコアリング 記事の公開日時 のスコアリング
おすすめ順で記事を掲載している各種ページ リージョンページ 国ページ 地域ページ カテゴリページ サブカテゴリページ 特集・連載ページ タグページ
❷ おすすめ順でナビゲーション
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で各 種ナビゲーションの並び順に利 用する スコアの高いおすすめの記事 が含まれている各種項目(タ グ、著者、エリア)でナビゲー ションを提供
おすすめ順ナビゲーション例 グローバルナビゲーション 各種ページに関連するフッターナビ ゲーション 各種一覧ページサブカテゴリーナビ ゲーション リージョン → 国 →
地域 カテゴリ → サブカテゴリ タグ → 関連するタグ
❸ ネストしたナビゲーション
ネストしたナビゲーション例 ❶ リージョンのナビゲーション 全ての記事群からTerms aggregation でエリアを 集計してナビゲーションを生成。 管理サイトで指定された順に掲載。 ❷ 国・地域のナビゲーション
各リージョン毎の記事群から Terms aggregationで 国・地域を集計してナビゲーションを生成。 Function score query のスコアを使って国・地域の 並び順を最適化(鮮度+人気+プロモ)。 エリア一覧ページ ❶ ❷
# 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 }”
❹ ネストしたナビゲーションの応用
Terms aggregation ネストしたナビゲーションの応用例 特集・連載一覧 Top hits aggregation Function score query
スコア Function score query スコア 特集・連載ごとに集計 特集・連載ごとに記事を掲載 「特集・連載一覧」クエリー
❺ フリーワード検索
フリーワード検索 • 漏れを少なくするため OR 検索をベースに設計 ◦ minimum_should_match を 60% にして、少ない単語数では、適合
率を重視 • 将来多言語対応を考慮して、 ICU アナライザーをベー スに言語処理を設計 ◦ 適合率<再現率という方針なので言語固有のアナライザーを採用し てません。 • カタカナキーワードはフレーズ検索するようにして適 合率を向上 ◦ ICUアナライザーは未知の単語は細かくトークナイズされる傾向なた め、フレーズで検索するようにしています。 • おすすめ順スコア+キーワードマッチ度スコアで掲載 順位を決定 ◦ 再現率重視のためおすすめ順のスコアを考慮すると不自然な検索結 果になってしまうため、現在はキーワードのマッチ度のみに変更して ます
メリット・デメリット
メリット • データ管理をシンプルに保てる • 柔軟にUXのビジネス要件を実現できる • ビジネス要件を簡単にチューニングできる • バッチ処理が少なくて済む •
リクエストして単純に表示するだけなのでUIの開発が簡単 ◦ Elasticsearch のクエリー: ビジネスロジック ◦ アプリケーション: ただ表示するするだけ
• 検索エンジンの特徴を活かして使わないと、開発が余計に面倒になる ◦ Elasticsearch != データベース(== 高度なアプリケーションAPIサーバー) • オリジナルのデータ(RDBなど)とは別にデータ設計するので多少面倒 デメリット
こんな使い方も
Indices {Elasticsearch} ❸ いずれかの不適切投 稿検出条件がマッチした 場合は不適切投稿と判 断する Percolate query を使って不適切投稿を検知する
INDEX SIDE (Admin side) SEARCH SIDE (Application side) 検索条件 検索条件 検索条件 検索条件 {Percolator query} ❶ 不適切投稿を検出するための 検索条件群を事前に登録する 登録 投稿内容 {doc} 検索 検索条件 結果 検索条件 {Percolator query} ❷ 投稿内容を検索条件 として検索する 管理者 投稿者 参考: Elasticsearchで不適切投稿のバリデーションチェックを実装してみた話 参考: Percolate query | Elasticsearch Guide
さいごに(お知らせ)
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/ 心揺さぶる体験をオンラインで お届け
第41回Elasticsearch勉強会 2021.04.22 #elasticsearchjp 「Elasticsearchで作る メディアサイト」/ Kunihiko Kido ご静聴ありがとうございました