SlideShare a Scribd company logo
1 of 27
Download to read offline
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
Cloud Firestoreで、
全文検索してみた。
今回は、実装内容の紹介です
1
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
自己紹介
出身地は佐賀です。三重県から地方勤務で虎の穴ラボの通販のチームにいます。
(2020年12月に虎の穴ラボに入社、二児の父です。)
フロントエンドは得意です。
推し
・南條愛乃さん(最新シングルのカップリング曲が好きで、よく聞いています!)
・TypeScript/Next.js/Tailwind CSS
2
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
アジェンダ
1. Firestoreで全文検索しようと思った経緯について
2. 全文検索の構成について
3. Firestoreのデータ構造について
4. インデックス登録処理について
5. 全文検索について
6. 実際の動き
7. まとめ
3
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
なぜ、Firestoreで
全文検索しようと思ったの
か?!
4
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
Firestoreで全文検索しようと思った経緯
個人的に作成しているブックマーク管理ツール(はてぶっぽいもの)で、キーワード検索
したい
https://kght6123-shiori.web.app/
● Firestoreは全文検索できない😭
● Firestoreは部分一致や後方一致の検索ができない😭
● 別に検索サーバを作るのはコストがかかる😭
追加費用を抑えつつ、なんとか、Cloud Firestore内で
Web ページの全文検索をしたい!と思った感じ。
5
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
全文検索の構成について
6
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
全文検索の構成について
全文検索に必要な構成を考えました・・・!
● データベース 👉 Cloud Firestore
● Webページ読み込み 👉 Playwright
● Webページの本文収集 👉 node-readability
● 日本語の分かち書き 👉 kuromojin
● バックエンドの言語 👉 TypeScript
7
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
ここに画像を貼る
なぜ、日本語の分かち書きにkuromojinを選んだか?
8
1. 日本語の詳しい情報が
とれる!!
2. 辞書が登録できる ※
※ 今回は辞書は未使用です
> kuromojiは日本語の分かち書き(形態素解析)を行う辞書を
もつライブラリです。
> 分かち書き(形態素解析)とは、文章を意味のある最小の単
位に分解し、意味や品詞などに判別すること。になります。
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
Firestore のデータ構造に
ついて
9
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
Firestore のデータ構造について
検索結果の画面に表示するデータ部分と
全文検索を行うためのインデックス部分で、
別々のコレクションに分かれてます。
画面に表示するデータ
● /shiori-users/${ユーザID}/headers/${ブックマークID}
全文検索を行うためのインデックス
● /shiori-users/${ユーザID}/indexes/${ブックマークID}
10
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
ここに画像を貼る
画面に表示するデータについて
11
含まれるデータ
● 作成日時
● お気に入り追加のフラグ
● ブックマークID
● ブックマークのタイトル画像のURL
(og:image)
● ピン留めのフラグ
● ブックマークのタイトル
● ブックマークのURL
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
ここに画像を貼る
全文検索を行うためのインデックスについて
12
● 分かち書き後の単語を属性名にする
● その属性値は 0 固定で入れる
(今後、拡張できそう)
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
インデックス登録処理につ
いてっ!
13
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
インデックス登録の処理について
1. 検索結果に表示するデータを登録・更新した
2. Cloud Firestore のトリガー発動!
3. Web ページをヘッドレスブラウザでレンダリング
4. ページコンテンツ&og:image の URL を収集
5. タイトル、本文テキストを分かち書きして収集
6. Cloud Firestore に登録する
14
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
ここに画像を貼る
Web ページをヘッドレスブラウザでレンダリング
15
1. Playwrightを起動する
2. ページを新規作成する
3. URLオブジェクトを作成する
4. ページに移動する
5. ドキュメントロード完了まで待つ
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
ここに画像を貼る
ページコンテンツ&og:image の URL を収集
16
1. ページのog:imageタグの属性(url)を取
得する
2. ページのコンテンツ(html)を取得する
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
ここに画像を貼る
タイトル、本文テキストを分かち書きして収集
17
1. node-readabilityで本文のHTMLのみ取得
する
2. 本文のHTMLからHTMLタグを取り除く
3. kuromojin で、日本語を分かち書きする
4. 分かち書き結果の表層系と読み仮名だけを
まとめる
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
ここに画像を貼る
Cloud Firestore に登録する
18
1. タイトル、og:image の URLを更新する
2. 分かち書きしたテキストをインデックスと
して登録する
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
全文検索処理についてっ!
19
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
インデックス検索の処理について
1. 検索キーワードを分かち書きする
2. Cloud Firestore のインデックスを検索して、ID リストを得
る
3. ID リストから表示するデータを取得する
4. 検索結果に表示するデータ情報を返す
20
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
ここに画像を貼る
検索キーワードを分かち書きする
21
1. 入力された検索キーワードを、分かち書き
する。
2. 分かち書きした結果の表層系だけで配列に
する。
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
ここに画像を貼る
インデックスを検索して、ID リストを得る
22
1. 分かち書きした結果から、インデックスを
検索する条件を作成する。
2. Cloud Firestoreに検索を実行して、IDリ
ストを取得する。
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
ここに画像を貼る
ID リストから表示するデータを取得する
23
1. IDリストから、検索結果に表示するデー
タを検索する。
2. 検索結果を返す。
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
実際の動き!!
24
今回は動画を撮っておきました!
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
ここに画像を貼る
じっさいのうごき!!
25
「黒文字」「クロモジ」「Firestore」などで
検索ができます。
(Kuromojiでは検索できません)
(多分、名詞を辞書を登録すればできる)
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
まとめ
Cloud Firestoreを使って、
簡単なキーワード検索なら、少し頑張れば実装できます!って話でした。
Cloud Firesotre で、Algolia や ElasticSearch を使わずに
安価に全文検索したい!と考えてる方は、
よろしければ、お試しください!
※ アクセス数が多いと、安くないかもしれませんが、、、
26
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
ご静聴いただき、
ありがとうございました!
27

More Related Content

What's hot

WebSocketのキホン
WebSocketのキホンWebSocketのキホン
WebSocketのキホンYou_Kinjoh
 
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)増田 亨
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みChihiro Ito
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化Gosuke Miyashita
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) Hironobu Isoda
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)Shota Shinogi
 
【第21回Elasticsearch勉強会】aws環境に合わせてelastic stackをログ分析基盤として構築した話
【第21回Elasticsearch勉強会】aws環境に合わせてelastic stackをログ分析基盤として構築した話【第21回Elasticsearch勉強会】aws環境に合わせてelastic stackをログ分析基盤として構築した話
【第21回Elasticsearch勉強会】aws環境に合わせてelastic stackをログ分析基盤として構築した話Hibino Hisashi
 
MVC の Model を考える
MVC の Model を考えるMVC の Model を考える
MVC の Model を考えるtomo_masakura
 
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版LINE Corporation
 
react-scriptsはwebpackで何をしているのか
react-scriptsはwebpackで何をしているのかreact-scriptsはwebpackで何をしているのか
react-scriptsはwebpackで何をしているのか暁 三宅
 
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介がっつりMongoDB事例紹介
がっつりMongoDB事例紹介Tetsutaro Watanabe
 
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)Yoshiro Tokumasu
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」y torazuka
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法モノビット エンジン
 
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)NTT DATA Technology & Innovation
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 

What's hot (20)

WebSocketのキホン
WebSocketのキホンWebSocketのキホン
WebSocketのキホン
 
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)
 
【第21回Elasticsearch勉強会】aws環境に合わせてelastic stackをログ分析基盤として構築した話
【第21回Elasticsearch勉強会】aws環境に合わせてelastic stackをログ分析基盤として構築した話【第21回Elasticsearch勉強会】aws環境に合わせてelastic stackをログ分析基盤として構築した話
【第21回Elasticsearch勉強会】aws環境に合わせてelastic stackをログ分析基盤として構築した話
 
MVC の Model を考える
MVC の Model を考えるMVC の Model を考える
MVC の Model を考える
 
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版
 
react-scriptsはwebpackで何をしているのか
react-scriptsはwebpackで何をしているのかreact-scriptsはwebpackで何をしているのか
react-scriptsはwebpackで何をしているのか
 
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介がっつりMongoDB事例紹介
がっつりMongoDB事例紹介
 
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
 
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 

Similar to Cloud Firestoreで、 全文検索してみた。

Vue3×Firebaseでサーバレスなアプリを作ってみた
Vue3×Firebaseでサーバレスなアプリを作ってみたVue3×Firebaseでサーバレスなアプリを作ってみた
Vue3×Firebaseでサーバレスなアプリを作ってみた虎の穴 開発室
 
20210809 story book_driven_new_system_development_nuxtjs
20210809 story book_driven_new_system_development_nuxtjs20210809 story book_driven_new_system_development_nuxtjs
20210809 story book_driven_new_system_development_nuxtjs虎の穴 開発室
 
Dark side of the reflect
Dark side of the reflectDark side of the reflect
Dark side of the reflectsairoutine
 
Google ARが提供する WebAR 101
Google ARが提供する WebAR 101Google ARが提供する WebAR 101
Google ARが提供する WebAR 101Hirokazu Egashira
 
Vue3でアプリ開発してみて 困ったこと4選
Vue3でアプリ開発してみて 困ったこと4選Vue3でアプリ開発してみて 困ったこと4選
Vue3でアプリ開発してみて 困ったこと4選虎の穴 開発室
 
Playing with resin.io (kawasaki.rb #46)
Playing with resin.io (kawasaki.rb #46)Playing with resin.io (kawasaki.rb #46)
Playing with resin.io (kawasaki.rb #46)Yuta Shimizu
 
GraalVM Native Images by Oleg Selajev @shelajev
GraalVM Native Images by Oleg Selajev @shelajevGraalVM Native Images by Oleg Selajev @shelajev
GraalVM Native Images by Oleg Selajev @shelajevOracle Developers
 
Tapestry In Action For Real
Tapestry In Action For RealTapestry In Action For Real
Tapestry In Action For RealSkills Matter
 
Design and Evolution of cyber-dojo
Design and Evolution of cyber-dojoDesign and Evolution of cyber-dojo
Design and Evolution of cyber-dojoJon Jagger
 

Similar to Cloud Firestoreで、 全文検索してみた。 (10)

Vue3×Firebaseでサーバレスなアプリを作ってみた
Vue3×Firebaseでサーバレスなアプリを作ってみたVue3×Firebaseでサーバレスなアプリを作ってみた
Vue3×Firebaseでサーバレスなアプリを作ってみた
 
20210809 story book_driven_new_system_development_nuxtjs
20210809 story book_driven_new_system_development_nuxtjs20210809 story book_driven_new_system_development_nuxtjs
20210809 story book_driven_new_system_development_nuxtjs
 
Website Research
Website ResearchWebsite Research
Website Research
 
Dark side of the reflect
Dark side of the reflectDark side of the reflect
Dark side of the reflect
 
Google ARが提供する WebAR 101
Google ARが提供する WebAR 101Google ARが提供する WebAR 101
Google ARが提供する WebAR 101
 
Vue3でアプリ開発してみて 困ったこと4選
Vue3でアプリ開発してみて 困ったこと4選Vue3でアプリ開発してみて 困ったこと4選
Vue3でアプリ開発してみて 困ったこと4選
 
Playing with resin.io (kawasaki.rb #46)
Playing with resin.io (kawasaki.rb #46)Playing with resin.io (kawasaki.rb #46)
Playing with resin.io (kawasaki.rb #46)
 
GraalVM Native Images by Oleg Selajev @shelajev
GraalVM Native Images by Oleg Selajev @shelajevGraalVM Native Images by Oleg Selajev @shelajev
GraalVM Native Images by Oleg Selajev @shelajev
 
Tapestry In Action For Real
Tapestry In Action For RealTapestry In Action For Real
Tapestry In Action For Real
 
Design and Evolution of cyber-dojo
Design and Evolution of cyber-dojoDesign and Evolution of cyber-dojo
Design and Evolution of cyber-dojo
 

More from 虎の穴 開発室

Railsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認するRailsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認する虎の穴 開発室
 
虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf虎の穴 開発室
 
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdfDeno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf虎の穴 開発室
 
toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明虎の穴 開発室
 
Deno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介しますDeno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介します虎の穴 開発室
 
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –虎の穴 開発室
 
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと虎の穴 開発室
 
通販開発部の西田さん「通販開発マネジメントの5ルール」
通販開発部の西田さん「通販開発マネジメントの5ルール」通販開発部の西田さん「通販開発マネジメントの5ルール」
通販開発部の西田さん「通販開発マネジメントの5ルール」虎の穴 開発室
 
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!虎の穴 開発室
 
セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説虎の穴 開発室
 
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発虎の穴 開発室
 
Amplify Studioを使ってみた
Amplify Studioを使ってみたAmplify Studioを使ってみた
Amplify Studioを使ってみた虎の穴 開発室
 
いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!虎の穴 開発室
 
【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ虎の穴 開発室
 
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について虎の穴 開発室
 
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜	【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜 虎の穴 開発室
 
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント 虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント 虎の穴 開発室
 

More from 虎の穴 開発室 (20)

FizzBuzzで学ぶJavaの進化
FizzBuzzで学ぶJavaの進化FizzBuzzで学ぶJavaの進化
FizzBuzzで学ぶJavaの進化
 
Railsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認するRailsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認する
 
虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf
 
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdfDeno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
 
toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明
 
Deno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介しますDeno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介します
 
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
 
GCPの画像認識APIの紹介
GCPの画像認識APIの紹介 GCPの画像認識APIの紹介
GCPの画像認識APIの紹介
 
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
 
GitHub APIとfreshで遊ぼう
GitHub APIとfreshで遊ぼうGitHub APIとfreshで遊ぼう
GitHub APIとfreshで遊ぼう
 
通販開発部の西田さん「通販開発マネジメントの5ルール」
通販開発部の西田さん「通販開発マネジメントの5ルール」通販開発部の西田さん「通販開発マネジメントの5ルール」
通販開発部の西田さん「通販開発マネジメントの5ルール」
 
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
 
セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説
 
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
 
Amplify Studioを使ってみた
Amplify Studioを使ってみたAmplify Studioを使ってみた
Amplify Studioを使ってみた
 
いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!
 
【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ
 
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
 
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜	【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
 
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント 虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
 

Recently uploaded

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdfChristopherTHyatt
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 

Recently uploaded (20)

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 

Cloud Firestoreで、 全文検索してみた。

  • 1. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. Cloud Firestoreで、 全文検索してみた。 今回は、実装内容の紹介です 1
  • 2. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. 自己紹介 出身地は佐賀です。三重県から地方勤務で虎の穴ラボの通販のチームにいます。 (2020年12月に虎の穴ラボに入社、二児の父です。) フロントエンドは得意です。 推し ・南條愛乃さん(最新シングルのカップリング曲が好きで、よく聞いています!) ・TypeScript/Next.js/Tailwind CSS 2
  • 3. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. アジェンダ 1. Firestoreで全文検索しようと思った経緯について 2. 全文検索の構成について 3. Firestoreのデータ構造について 4. インデックス登録処理について 5. 全文検索について 6. 実際の動き 7. まとめ 3
  • 4. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. なぜ、Firestoreで 全文検索しようと思ったの か?! 4
  • 5. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. Firestoreで全文検索しようと思った経緯 個人的に作成しているブックマーク管理ツール(はてぶっぽいもの)で、キーワード検索 したい https://kght6123-shiori.web.app/ ● Firestoreは全文検索できない😭 ● Firestoreは部分一致や後方一致の検索ができない😭 ● 別に検索サーバを作るのはコストがかかる😭 追加費用を抑えつつ、なんとか、Cloud Firestore内で Web ページの全文検索をしたい!と思った感じ。 5
  • 6. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. 全文検索の構成について 6
  • 7. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. 全文検索の構成について 全文検索に必要な構成を考えました・・・! ● データベース 👉 Cloud Firestore ● Webページ読み込み 👉 Playwright ● Webページの本文収集 👉 node-readability ● 日本語の分かち書き 👉 kuromojin ● バックエンドの言語 👉 TypeScript 7
  • 8. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. ここに画像を貼る なぜ、日本語の分かち書きにkuromojinを選んだか? 8 1. 日本語の詳しい情報が とれる!! 2. 辞書が登録できる ※ ※ 今回は辞書は未使用です > kuromojiは日本語の分かち書き(形態素解析)を行う辞書を もつライブラリです。 > 分かち書き(形態素解析)とは、文章を意味のある最小の単 位に分解し、意味や品詞などに判別すること。になります。
  • 9. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. Firestore のデータ構造に ついて 9
  • 10. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. Firestore のデータ構造について 検索結果の画面に表示するデータ部分と 全文検索を行うためのインデックス部分で、 別々のコレクションに分かれてます。 画面に表示するデータ ● /shiori-users/${ユーザID}/headers/${ブックマークID} 全文検索を行うためのインデックス ● /shiori-users/${ユーザID}/indexes/${ブックマークID} 10
  • 11. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. ここに画像を貼る 画面に表示するデータについて 11 含まれるデータ ● 作成日時 ● お気に入り追加のフラグ ● ブックマークID ● ブックマークのタイトル画像のURL (og:image) ● ピン留めのフラグ ● ブックマークのタイトル ● ブックマークのURL
  • 12. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. ここに画像を貼る 全文検索を行うためのインデックスについて 12 ● 分かち書き後の単語を属性名にする ● その属性値は 0 固定で入れる (今後、拡張できそう)
  • 13. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. インデックス登録処理につ いてっ! 13
  • 14. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. インデックス登録の処理について 1. 検索結果に表示するデータを登録・更新した 2. Cloud Firestore のトリガー発動! 3. Web ページをヘッドレスブラウザでレンダリング 4. ページコンテンツ&og:image の URL を収集 5. タイトル、本文テキストを分かち書きして収集 6. Cloud Firestore に登録する 14
  • 15. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. ここに画像を貼る Web ページをヘッドレスブラウザでレンダリング 15 1. Playwrightを起動する 2. ページを新規作成する 3. URLオブジェクトを作成する 4. ページに移動する 5. ドキュメントロード完了まで待つ
  • 16. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. ここに画像を貼る ページコンテンツ&og:image の URL を収集 16 1. ページのog:imageタグの属性(url)を取 得する 2. ページのコンテンツ(html)を取得する
  • 17. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. ここに画像を貼る タイトル、本文テキストを分かち書きして収集 17 1. node-readabilityで本文のHTMLのみ取得 する 2. 本文のHTMLからHTMLタグを取り除く 3. kuromojin で、日本語を分かち書きする 4. 分かち書き結果の表層系と読み仮名だけを まとめる
  • 18. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. ここに画像を貼る Cloud Firestore に登録する 18 1. タイトル、og:image の URLを更新する 2. 分かち書きしたテキストをインデックスと して登録する
  • 19. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. 全文検索処理についてっ! 19
  • 20. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. インデックス検索の処理について 1. 検索キーワードを分かち書きする 2. Cloud Firestore のインデックスを検索して、ID リストを得 る 3. ID リストから表示するデータを取得する 4. 検索結果に表示するデータ情報を返す 20
  • 21. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. ここに画像を貼る 検索キーワードを分かち書きする 21 1. 入力された検索キーワードを、分かち書き する。 2. 分かち書きした結果の表層系だけで配列に する。
  • 22. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. ここに画像を貼る インデックスを検索して、ID リストを得る 22 1. 分かち書きした結果から、インデックスを 検索する条件を作成する。 2. Cloud Firestoreに検索を実行して、IDリ ストを取得する。
  • 23. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. ここに画像を貼る ID リストから表示するデータを取得する 23 1. IDリストから、検索結果に表示するデー タを検索する。 2. 検索結果を返す。
  • 24. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. 実際の動き!! 24 今回は動画を撮っておきました!
  • 25. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. ここに画像を貼る じっさいのうごき!! 25 「黒文字」「クロモジ」「Firestore」などで 検索ができます。 (Kuromojiでは検索できません) (多分、名詞を辞書を登録すればできる)
  • 26. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. まとめ Cloud Firestoreを使って、 簡単なキーワード検索なら、少し頑張れば実装できます!って話でした。 Cloud Firesotre で、Algolia や ElasticSearch を使わずに 安価に全文検索したい!と考えてる方は、 よろしければ、お試しください! ※ アクセス数が多いと、安くないかもしれませんが、、、 26
  • 27. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. ご静聴いただき、 ありがとうございました! 27