Как индексировать данные из Firebase Firestore в эластичный поиск приложений с помощью облачной функции?

У меня есть данные, созданные пользователем в firestore. для функции полнотекстового поиска я пытаюсь использовать эластичный поиск приложений. Я хочу развернуть облачную функцию, поэтому всякий раз, когда документ записывается в firestore, необходимо запускать функцию, после чего функция будет индексировать документ.

      const functions = require("firebase-functions");
const admin = require("firebase-admin");
const axios = require("axios");
admin.initializeApp(functions.config().firebase);
exports.createBPS = functions.firestore
    .document("MyCollection/{docId}")
    .onWrite((snap, context) => {
      axios.post(
          "https://myapp.ent.us-west1.gcp.cloud.es.io/api/as/v1/engines/myengine/documents?auth_token=private-aadsafdsfadsfdsafdafd",
          snap.after.data()
      );
});

Любая помощь будет оценена по достоинству. Я разрабатываю мобильное приложение, используя следующий поиск эластичных приложений Flutter Firebase

Образец документа в firestore {"id": "1234566", "name": "Мое имя", "description": "Мое описание" и т. Д.}

2 ответа

Я бы рекомендовал использовать официальный ES SDK. Это сделало бы ваш код более стабильным и более легким для чтения.

Вот инструкция , как установить его и сюда простой пример.

Вы можете увидеть руководство ниже на странице расширения вашей firebase.


(Необязательно) Заполнить или импортировать существующие документы. Это расширение отправляет только содержимое измененных документов — оно не экспортирует полный набор данных существующих документов в Поиск приложений. Таким образом, чтобы заполнить ваш набор данных всеми документами в вашей коллекции, вы можете запустить скрипт импорта, предоставляемый этим расширением.

Перед запуском скрипта сначала следуйте инструкциям здесь, чтобы «Создать файл закрытого ключа для вашей учетной записи службы». Загрузите его и сохраните где-нибудь как serviceAccountKey.json.

      GOOGLE_APPLICATION_CREDENTIALS= /path/to/your/serviceAccountKey.json \
COLLECTION_PATH=TodoItem \
INDEXED_FIELDS=content,isPublic, writerID \
ENTERPRISE_SEARCH_URL=https://todomateelastic.ent.us-central1.gcp.cloud.es.io \
APP_SEARCH_API_KEY= { your private app search API key here } \
APP_SEARCH_ENGINE_NAME=todomatecontent \
npx @elastic/app-search-firestore-extension import