Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Elasticsearchで作るメディアサイト
Search
Kunihiko Kido
April 22, 2021
Technology
2.5k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Elasticsearchで作るメディアサイト
体験メディアサイトYOKKA (よっか) のES活用例紹介
第41回Elasticsearch勉強会
2021.04.22 #elasticsearchjp
Kunihiko Kido
April 22, 2021
More Decks by Kunihiko Kido
See All by Kunihiko Kido
emo.travel の紹介と Elasticsearch の活用について
kunihikokido
1
2.2k
VELTRA - Elastic{ON} Tour Tokyo 2017
kunihikokido
0
1.6k
Elasticsearch 勉強会 2/2
kunihikokido
1
1.6k
Elasticsearch 勉強会 1/2
kunihikokido
4
5.6k
Developers.IO 2016 C-2 「Elasticsearchで自由自在に検索・分析できるようになるためのヒント」
kunihikokido
7
2.3k
開発効率アップ!Elasticsearch Client Tool 作ってみた
kunihikokido
0
1.8k
はじめての Elasticsearch
kunihikokido
1
1.5k
Elasticsearch 日本語スキーマレス環境構築と、ついでに多言語対応
kunihikokido
5
8k
Other Decks in Technology
See All in Technology
Where Is JetBrains AI Heading- — Central CLI, Air Alpha, and the Agentic Development Stack
x5gtrn
PRO
0
160
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
260
Snowflakeで実現する全社横断の顧客の声(VOC)分析・活用基盤@Snowflake World Tour Tokyo 2026
yuto16
0
200
AIオーケストレーションを活用した 開発ワークフローの設計と実践
bqnq
0
150
ペアプロの価値はコードを書くことだけじゃない
codmoninc
PRO
0
200
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
360
Tab5をRubyで動くパソコンにする
kishima
2
350
深夜のクラウド懺悔室 1:29:300 or 1:0:0
kazzpapa3
1
240
AI活用の現在地、 ちゃんと見えてますか?/XPfest-2026
visional_engineering_and_design
0
210
新機種発売前に見直そう!端末移行で再ログインが要るアプリ・要らないアプリは何が違うのか 〜シームレスに再開できる設計と実装〜
zozotech
PRO
0
120
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
330
DEFCON_CHV_CTF_Write-up.pdf
bata_24
0
140
Featured
See All Featured
The Language of Interfaces
destraynor
162
27k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
390
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Navigating Weather and Climate Data
rabernat
0
510
Building Adaptive Systems
keathley
44
3.2k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
RailsConf 2023
tenderlove
30
1.5k
Thoughts on Productivity
jonyablonski
76
5.4k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
410
Fireside Chat
paigeccino
43
4k
Designing for humans not robots
tammielis
254
26k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
480
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 ご静聴ありがとうございました