Облачные функции для Firebase для индексации объектов базы данных Firebase в Алголии

1

Я прошел через документы, репозитории github, но пока ничего не работало.

Моя структура данных:

App {
    posts : {
        <post_keys> : {
            auth_name : "name",
            text : "some text" //and many other fields
                      }
            }
    }

1) Репозиторий Github: если я использую это, я получаю только одно поле из одной функции, если мне нужны все поля, мне нужно будет писать отдельные функции для каждого, что является плохим подходом.

2) Официальные документы Algolia для Node.js: это невозможно развернуть как облачную функцию, но она делает то, что я намереваюсь сделать.

Как я могу написать функцию, которая может быть развернута на Firebase и получает весь объект, проиндексированный его ключом в Algolia?

Теги:
firebase
google-cloud-functions
algolia

1 ответ

2
Лучший ответ

Хорошо, поэтому я пошел на создание функции Cloud Firebase, чтобы индексировать все объекты в индексе Algolia. Это решение:

То, что вы делали, выглядит примерно так:

exports.indexentry = functions.database.ref('/blog-posts/{blogid}/text').onWrite(event => {

Вы должны сделать следующее:

exports.indexentry = functions.database.ref('/blog-posts/{blogid}').onWrite(event => {
  const index = client.initIndex(ALGOLIA_POSTS_INDEX_NAME);
  var firebaseObject = event.data.val();
  firebaseObject.objectID = event.params.blogid;

  return index.saveObject(firebaseObject).then(
      () => event.data.adminRef.parent.child('last_index_timestamp').set(
          Date.parse(event.timestamp)));
});

Разница в первой строке: в первом случае вы слушаете только text изменения, поэтому вы получаете только данные, содержащие изменение текста. Во втором случае вы получаете весь объект, так как вы слушаете изменения во всем объекте блога (обратите внимание, как /text был удален).

Я тестировал его, и он работает для меня: весь объект, включая автора, был проиндексирован в Алголии.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню