本記事はこの記事の内容で使用したものです。
Firebaseのデータベースに変更があったときにそれを自動でAlgoliaのインデックスに反映してくれるようにします。
Node.jsをインストールします。
記事はいくらでもあるので参考にしてください。
node -v
v5.11.0
以下のパッケージを入れます。
npm install dotenv --save
npm install algoliasearch --save
npm install firebase --save
変数名「contactsRef」以下のデータに変化があった場合、それをAlgoliaのインデックスに反映させます。
Nodeが動いていないと働かないのでローカル以外で開発するときは外部サーバでNodeを動かした方がやりやすいです。
index.js
const algoliasearch = require('algoliasearch');
const dotenv = require('dotenv');
const firebase = require('firebase/app');
require('firebase/auth');
require('firebase/database');
dotenv.load();
// 接続するFirebaseのデータベースURL
var config = {
databaseURL: "https://XXXXXXXXXXXX.firebaseio.com",
};
firebase.initializeApp(config);
const database = firebase.database();
// configure algolia
const algolia = algoliasearch(
"XXXXXXXXXXX", //←Algoliaの「Application ID」
"XXXXXXXXXXXXXXXXXX" //←Algoliaの「Admin API Key」
);
const index = algolia.initIndex("sample"); //接続するAlgoliaのindex名
const contactsRef = database.ref('/msg'); //変更を反映する範囲を指定する今回は[msg]以下に変化があった場合に反映させている。
contactsRef.on('child_added', addOrUpdateIndexRecord);
contactsRef.on('child_changed', addOrUpdateIndexRecord);
contactsRef.on('child_removed', deleteIndexRecord);
// 「contactsRef」の中で新しいデータが追加されたらAlgoliaのindexに反映する関数。
function addOrUpdateIndexRecord(contact) {
const record = contact.val();
record.objectID = contact.key;
index
.saveObject(record)
.then(() => {
console.log('Firebase object indexed in Algolia', record.objectID);
})
.catch(error => {
console.error('Error when indexing contact into Algolia', error);
process.exit(1);
});
}
// 「contactsRef」の中でデータが削除されたらAlgoliaのindexに反映する関数。
function deleteIndexRecord(contact) {
const objectID = contact.key;
index
.deleteObject(objectID)
.then(() => {
console.log('Firebase object deleted from Algolia', objectID);
})
.catch(error => {
console.error('Error when deleting contact from Algolia', error);
process.exit(1);
});
}
package.json
{
"name": "sample",
"version": "0.0.0",
"description": "sample",
"dependencies": {
"algoliasearch": "^3.24.9",
"dotenv": "^4.0.0",
"firebase-admin": "~5.8.1"
}
}
node index.js
まとめ
公式の記事を参考に作りましたが、その通りにやるとエラーで動かないので少し変えています。Versionによってはエラーが出る可能性があるので注意してください。
間違い等ありましたら連絡してください。