Как я могу проиндексировать «подколлекции» Firestore в Algolia для начального индекса и текущей синхронизации (при создании / обновлении / удалении)? - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь проиндексировать коллекцию 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) или создать / обновить / удалить с помощью облачных функций.

Любая помощь, советы, ссылки или предложения будут с благодарностью.

...