Я пытаюсь проиндексировать коллекцию Firestore, которая содержит вложенную коллекцию в Algolia, и мне нужна помощь в индексации вложенных коллекций, когда я выполняю первоначальный индекс, а также текущую синхронизацию (при создании / обновлении / удалении).
Пример коллекции: 'collection1 / subcollection'
Первым заданием является первоначальная синхронизация сбора и подбора в Алгое
Вторая задача - текущая синхронизация (при создании / обновлении / удалении).
Я использую этот код для начального индекса от Firestore до Algolia:
const algoliasearch = require('algoliasearch')
const dotenv = require('dotenv')
const firebase = require('firebase');
const firestore = require('firebase/firestore');
// load values from the .env file in this directory into process.env
dotenv.config();
// initializes the firebase database.
firebase.initializeApp({
projectId: process.env.FIREBASE_PROJECT_ID,
databaseURL: process.env.FIREBASE_DATABASE_URL
})
const db = firebase.firestore();
// configure algolia
const algolia = algoliasearch(
process.env.ALGOLIA_APP_ID,
process.env.ALGOLIA_API_KEY
);
const index = algolia.initIndex(process.env.ALGOLIA_INDEX_NAME);
var docRef = db.collection(process.env.ALGOLIA_INDEX_NAME);
const records = [];
db.collection(process.env.ALGOLIA_INDEX_NAME).get()
.then((snapshot) => {
snapshot.forEach((doc) => {
// get the key and data from the snapshot
const childKey = doc.id;
const childData = doc.data();
// We set the Algolia objectID as the Firebase .key
childData.objectID = childKey;
// Add object for indexing
records.push(childData);
console.log(doc.id, '=>', doc.data());
});
// Add or update new objects
index.saveObjects(records).then(() => {
console.log('Documents imported into Algolia');
process.exit(0);
})
.catch(error => {
console.error('Error when importing documents into Algolia', error);
process.exit(1);
});
})
.catch((err) => {
console.error('Error getting documents', error);
});
Тогда пример кода onCreate:
exports.indexCollection1 = functions.firestore
.document('collection1/{ID}')
.onCreate((snap, context) => {
const data = snap.data();
const objectID = snap.id;
// Add the data to the algolia index
return index.addObject({
objectID,
...data
});
});
Я могу выполнить начальный индекс collection1 и onCreate / Update / Delete, но мне не удалось проиндексировать подколлекцию collection1 (collection1 / subcollection) или создать / обновить / удалить с помощью облачных функций.
Любая помощь, советы, ссылки или предложения будут с благодарностью.