【Firestore】Firestoreに変更があったら自動でAlgoliaに反映する

Firestoreのドキュメントにcreate、update、deleteがされたときに自動でAlgoliaに反映する方法です。

前提

Algoliaにusersというインデックスが存在し、Firestoreのusersコレクションのドキュメントに変更があったときにAlgoliaに反映します。

ソースコード

Cloud FunctionsのCloud Firestore トリガーを使用します。

onWriteを使用するとcreate、update、deleteされたときにトリガーされます。

change.after.dataで変更後のデータをオブジェクト形式で取り出せます。

Algoliaにデータを書き込むときはデータのキーとなるobjectIDが必須なので、FirestoreのドキュメントID (context.params.userId)をそのまま使用しています。

Firestoreからドキュメントが削除された場合はchange.after.dataがundefinedとなるので、change.before.dataで削除したドキュメントのドキュメントIDを取得してindex.deleteObjectに渡しています。

const functions = require("firebase-functions");

const algoliasearch = require('algoliasearch');

const client = algoliasearch('Application ID', 'YourWriteAPIKey');

const index = client.initIndex('users');

exports.usersOnCreate = functions.firestore
  .document('users/{userId}')
  .onWrite((change, context) => {

    const record = change.after?.data();
    // { id: '1', name: 'Tanaka' } or undefined

    if (record) {
      index.saveObject({...record, objectID: context.params.userId}).wait();
    } else {
      index.deleteObject(change.before.data().id);
    }
  });

IT技術ブログ
↓↓「にほんブログ村」のランキングに参加しています。少しでも面白い、参考になったとか思われたらポチッとしていただけると嬉しいです!

にほんブログ村 IT技術ブログへ

にほんブログ村