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.7k
はじめての Elasticsearch
kunihikokido
1
1.4k
Elasticsearch 日本語スキーマレス環境構築と、ついでに多言語対応
kunihikokido
5
7.8k
Other Decks in Technology
See All in Technology
生成AIのガバナンスの全体像と現実解
fnifni
1
190
日本版とグローバル版のモバイルアプリ統合の開発の裏側と今後の展望
miichan
1
130
KubeCon NA 2024 Recap: How to Move from Ingress to Gateway API with Minimal Hassle
ysakotch
0
210
kargoの魅力について伝える
magisystem0408
0
210
2024年にチャレンジしたことを振り返るぞ
mitchan
0
140
AWS re:Invent 2024で発表された コードを書く開発者向け機能について
maruto
0
190
継続的にアウトカムを生み出し ビジネスにつなげる、 戦略と運営に対するタイミーのQUEST(探求)
zigorou
0
590
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
170
20241220_S3 tablesの使い方を検証してみた
handy
4
600
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
460
alecthomas/kong はいいぞ / kamakura.go#7
fujiwara3
1
300
社外コミュニティで学び社内に活かす共に学ぶプロジェクトの実践/backlogworld2024
nishiuma
0
270
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
KATA
mclloyd
29
14k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
What's in a price? How to price your products and services
michaelherold
243
12k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
GitHub's CSS Performance
jonrohan
1030
460k
Agile that works and the tools we love
rasmusluckow
328
21k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
520
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Facilitating Awesome Meetings
lara
50
6.1k
Scaling GitHub
holman
458
140k
Side Projects
sachag
452
42k
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 ご静聴ありがとうございました