Я прошел через документы, репозитории github, но пока ничего не работало.
Моя структура данных:
App {
posts : {
<post_keys> : {
auth_name : "name",
text : "some text" //and many other fields
}
}
}
1) Репозиторий Github: если я использую это, я получаю только одно поле из одной функции, если мне нужны все поля, мне нужно будет писать отдельные функции для каждого, что является плохим подходом.
2) Официальные документы Algolia для Node.js: это невозможно развернуть как облачную функцию, но она делает то, что я намереваюсь сделать.
Как я могу написать функцию, которая может быть развернута на Firebase и получает весь объект, проиндексированный его ключом в Algolia?
Хорошо, поэтому я пошел на создание функции 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
был удален).
Я тестировал его, и он работает для меня: весь объект, включая автора, был проиндексирован в Алголии.