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
新「つくれぽ」検索の開発について/Cookpad Tech Kitchen#24
Search
Yusuke Naito
August 21, 2020
Programming
1
670
新「つくれぽ」検索の開発について/Cookpad Tech Kitchen#24
Yusuke Naito
August 21, 2020
Tweet
Share
Other Decks in Programming
See All in Programming
ESLintプラグインを使用してCDKのセオリーを適用する
yamanashi_ren01
2
230
PHPで学ぶプログラミングの教訓 / Lessons in Programming Learned through PHP
nrslib
4
1.1k
『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code
minodriven
28
4k
サーバーゆる勉強会 DBMS の仕組み編
kj455
1
300
毎日13時間もかかるバッチ処理をたった3日で60%短縮するためにやったこと
sho_ssk_
1
540
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
2
7.7k
盆栽転じて家具となる / Bonsai and Furnitures
aereal
0
1.8k
Внедряем бюджетирование, или Как сделать хорошо?
lamodatech
0
930
はてなにおけるfujiwara-wareの活用やecspressoのCI/CD構成 / Fujiwara Tech Conference 2025
cohalz
2
2.6k
VisionProで部屋の明るさを反映させるシェーダーを作った話
segur
0
100
Lookerは可視化だけじゃない。UIコンポーネントもあるんだ!
ymd65536
1
130
HTML/CSS超絶浅い説明
yuki0329
0
190
Featured
See All Featured
For a Future-Friendly Web
brad_frost
176
9.5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
570
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.4k
Measuring & Analyzing Core Web Vitals
bluesmoon
5
210
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
How to Think Like a Performance Engineer
csswizardry
22
1.3k
Scaling GitHub
holman
459
140k
Docker and Python
trallard
43
3.2k
Transcript
事業開発部 内藤雄介 2020/08/21 Cookpad Tech Kitchen #24 新「つくれぽ」検索の 開発について
• 内藤 雄介 @9toon • 14年新卒→(子会社化/転籍)→19年再入社 • 事業開発部サーチエンジニアリングG長 • バックエンドエンジニア
• 大阪からフルリモート 自己紹介
• 新「つくれぽ」とは? • 新「つくれぽ」の検索機能の開発について ◦ 全文検索システムの選定 ◦ 検索精度向上の工夫 ▪ フィルタリング
▪ ランキング 今日お話すること
新「つくれぽ」とは?
• 2006年に誕生 • レシピ作者に「ありがとう」 を伝える手段 これまでの「つくれぽ」とは?
「感謝」から「みんなへのおすすめ」へ ref: 『13年続いた「つくれぽ」をリニューアルした話』
新「つくれぽ」とは? • 「みんなへのおすすめ」の手段 • 他人が見ても楽しめるように リッチなフォーマットに進化 ◦ 3枚までの写真/動画 ◦ ハッシュタグ
新「つくれぽ」の検索機能の開発
• 世界最大級のRailsモノリス • 「理由はよくわからないがとにかくこれをさわるだけ で開発期間が3倍になる」 cookpad_all という魔境
「ふつう」のRails開発をするために ref: クックパッド開発者ブログ『モダンBFFを活用した既存APIサーバーの再構築』 • Microservices化 ◦ Rails 6.0.x ◦ Ruby
2.6 ◦ Aurora MySQL... • Orcha(BFF)を通して 新旧APIを統合
検索システムも「身軽」にしたい • レシピ検索にはSolrを長年利用している • 既存検索システムの課題 ◦ 「人気順」等の大事な機能を支えるバッチ類やビジ ネスロジックが入り乱れていて触りづらい... ◦ Solr4.9を使っていてかなり古かった(※当時)
• →別システムに切り出して開発したい ref: クックパッド開発者ブログ『レシピ検索を支えるレガシーでクリティカルな 大規模バッチを刷新した話』
「いい検索システム」とは • 「フィルタリング」✕「ランキング」 • フィルタリング: ◦ 文書群の中から目的の文書をどう絞り込むか? ◦ 全文検索では文章をどう単語に分割するかが重要 •
ランキング: ◦ 絞り込んだ文書をどう順序に並べるか?
検索エンジンをどう選定するか? • Amazon Elasticsearch Service(AES)を採用した ◦ いち早く検証に入りたい(構築コスト) ◦ 開発に集中したい(運用コスト) •
制約: ◦ ユーザ辞書が使えない(※当時) ◦ Close Index APIが使えない
• 「鶏もも肉のトマト煮」 ◦ 辞書なし(素の kuromoji) ▪ 鶏もも_肉_の_トマト_煮 ◦ 辞書あり ▪
鶏もも肉_の_トマト煮 ◦ ↑料理ドメインでは頻出の「鶏もも肉」でも適切に 分かち書きできない! ユーザー辞書の有無での形態素解析の差分
Analyzerの働き 1. Char filter(文字列のまま処理) ◦ 例. HTML文字列の除去 etc. 2. Tokenizer(文字列をトークン(単語)に分割)
◦ 例. ngram, kuromoji, whitespace 3. Token filter(トークンに対する処理) ◦ 例. synonym(同義語の展開)
• レシピ検索で培った言語資源が gem 化されている ◦ text_processor(MeCab+カスタム辞書のwrapper) ◦ word_essence(後述) • 「分かち書き」をアプリケーション側で行う
◦ text_processor で分割して空白区切りに直す ◦ Elasticsearchでは同義語の展開のみ行う ▪ whitespace tokenizer + synonym token filter 今回採用した方法
1. Elasticsearchを自前でHostする a. EC2上に構築する b. ECS上に構築する(cookpad mart はこれ) 2. Elastic
Cloudを利用する 3. etc? 他にどんな選択肢があった? • カスタムプラグインを使う? • NEologd や UniDic のような別の辞書を使う? ref: クックパッド開発者ブログ『サービス特性にあった検索システムの設計戦略』
フィルタリングの工夫 - クエリ理解 • word_essence という社内 gem ◦ ある単語がどういう属性なのかを判定できる ◦
例. メニュー名、原材料名、調味料 etc. • 「トマト パスタ」は「原材料+メニュー名」と分かる ◦ フレーズ検索に切り替える ▪ ✕パスタ用トマト ▪ ◦トマト風味の地中海風パスタ
• 「つくれぽ」は人気の「レシピ」に集まりやすい ◦ 単純に並べると、特定の「レシピ」への「つくれ ぽ」に検索結果が偏ってしまう ◦ →「レシピを探す体験」が損なわれる • ebay さんの技術記事を参考に、ページ内の「多様性」
を制御するリランクの仕組みを導入 ランキングの工夫 - Diversify ref: https://tech.ebayinc.com/engineering/diversity-in-search/
リランク後の 検索結果 ランキングの工夫 - Diversify ref: https://tech.ebayinc.com/engineering/diversity-in-search/ 同じ「レシピ」は1ページに1つまで!(制約 条件) 違反したら減点!(ペナルティ)
1: recipe_A 2: recipe_A 3: recipe_B 10: recipe_C 1: recipe_A 3: recipe_B 10: recipe_C 2: recipe_A 元の検索結果 (Top-k) agents ... ...
• cookpad は今、「つくれぽ」をはじめ、サービス全体 のエコシステムの再構築に取り組んでいる • 培ってきた資源を活かしながら、新しい価値を作るこ とに日々試行錯誤している まとめ