概要
Firestoreには全文検索機能はないため、通常であればElasticsearchなどの外部サービスを利用する必要が出てくるわけですが、それを使わずにFirestore(とCloud Functions)で全文検索できるようにするやり方を紹介します。
内容的には、Firestore(+Cloud Functions)で関連度つき全文検索をできるようにした話 で紹介したソースコードの使い方の解説になります。
前提
- 課金できるGCPアカウントを持っていること(Firestoreで必要)
- gcloudコマンドを実行できる環境があること(推奨)
- なければ ここ を参考にインストールする
- なくても手動でデプロイすればいけるので、必須ではない
大まかな流れ
- Consoleからプロジェクトを作成
- Cloud Firestoreをセットアップする
- Cloud Funcionsの関数をデプロイする
すでにセットアップ済みの部分は適宜飛ばしてください。
Consoleからプロジェクトを作成
GCPのWebコンソール の上部にある、∴プロジェクト名▼ のところからプロジェクトを作成するか、__プロジェクト作成ページ__に直接アクセスしてプロジェクトを作成する。
Cloud Firestoreをセットアップする
1. Firestoreをネイティブモードで開始
**Firestoreのプロダクトページ**に移動し、__ネイティブモードを選択__をクリックし、続いて表示されるページでリージョンを選択して__データベースを作成__する。
このとき、選択するリージョンは後々作成するCloud Functionsと同じものにする必要がある(検索速度維持のため)。
2. Firebaseを有効にする
データベース作成が完了したらFirestoreのデータベースのページが表示されているはずなので、そこの左側にある__セキュリティルール__をクリックし、ページ遷移先にある__FIREBASEを有効にする__ボタンをクリックする。
Cloud Functionsの関数をデプロイする
1. Cloud Build APIを有効にする
Cloud Functionsの関数をデプロイするために必要なので、以下のURLにアクセスしてCloud Build APIを有効にする。
https://console.cloud.google.com/apis/library/cloudbuild.googleapis.com
2. Cloud Functionsの関数をデプロイする
以上で設定が終わったので、次は関数をデプロイして実際にテキストを格納・検索できるかどうかを確認します。
以下、gcloudでのデプロイ方法を解説しますが、当然コンソールからデプロイすることも可能です。その場合はリージョンをFirestoreと同じものにすること、メモリを2GB以上にすることを忘れないでください。
-
gcloud config set project [プロジェクトID]
でプロジェクトを切り替えて - デプロイするファイル(
main.py
とrequirements.txt
)が存在するディレクトリに移動して -
main.py
中のFirebaseプロジェクト名を、今回作成したプロジェクトのIDに置き換えて - 以下のコマンドでデプロイする
gcloud functions deploy [function名] --entry-point main --runtime python38 --trigger-http --allow-unauthenticated --region [Firestoreのリージョン] --memory 2048MB
3. HTTPのトリガーURLにアクセスしてデプロイできたか確認する
以下が正常に行えるかを確認する:
- テキストをFirestoreに入れる
https://[トリガーURL]?method=index&text=テストです - 検索する
https://[トリガーURL]?method=search&q=テスト - 削除する
https://[トリガーURL]?method=delete&q=[テキストのdoc_id]
以上です。