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.3k
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.4k
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
ネットワークだけ隔離されたコンテナ作成デモ / Kichijoji.pm36
tenforward
1
230
OR学会2024秋_短期収益と将来のオフ方策評価性能を考慮したクーポン割当方策混合比の決定
recruitengineers
PRO
4
460
株式会社EventHub・エンジニア採用資料
eventhub
0
2.9k
リアルお遍路+SORACOM IoT
ozk009
1
140
JEP 480: Structured Concurrency
aya_ebata
0
130
Creative UIs with Compose: DroidKaigi 2024
chrishorner
1
580
Developer Experienceを向上させる基盤づくりの取り組み事例集
coconala_engineer
0
150
20240911_New_Relicダッシュボード活用例
speakerdeckfk
0
110
不動産 x AIことはじめ~データの真価を拓くために
estie
0
110
Fediverse Discovery Providers overview
andypiper
0
170
効果的なオンコール対応と障害対応
ryuichi1208
6
3.1k
LLVM/ASMを使った有限体の高速実装
herumi
0
120
Featured
See All Featured
How GitHub Uses GitHub to Build GitHub
holman
472
290k
How GitHub (no longer) Works
holman
310
140k
Speed Design
sergeychernyshev
22
430
Designing for Performance
lara
604
68k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
1
54
Typedesign – Prime Four
hannesfritz
39
2.3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
225
22k
Large-scale JavaScript Application Architecture
addyosmani
508
110k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.3k
Pencils Down: Stop Designing & Start Developing
hursman
119
11k
A designer walks into a library…
pauljervisheath
201
24k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
26
1.9k
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 ご静聴ありがとうございました