javascript - Cloud Functions for Firebase 在 Algolia 中索引 Firebase 数据库对象

标签 javascript node.js firebase google-cloud-functions algolia

我查看了文档、github 存储库,但还没有对我有用。

我的数据结构:

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

1) Github repository : 如果我使用它,我只能从一个函数中获取一个字段,如果我需要所有字段,我将需要为每个字段编写单独的函数,这是一种糟糕的方法。

2) Algolia Official Docs for Node.js :这不能部署为云功能,但它可以完成我打算做的事情。

我如何编写一个可以部署在 Firebase 上并在 Algolia 中使用其键索引整个对象的函数?

最佳答案

好的,所以我继续创建一个 Firebase Cloud 函数,以便为 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 更改,因此您只会获得包含文本更改的数据。 在第二种情况下,您获得了整个对象,因为您监听了所有 blog 对象的变化(注意 /text 是如何被删除的)。

我测试了它,它对我有用:包括作者在内的整个对象都在 A​​lgolia 中编制了索引。

关于javascript - Cloud Functions for Firebase 在 Algolia 中索引 Firebase 数据库对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44532715/

相关文章:

javascript - Node.js 在 mysql 中使用异步/等待

C# 向具有唯一自定义数据 FCM 的设备组发送通知

ios - 使用适用于 iOS 的 FirebaseUI 访问数据库

javascript - webkitSpeechGrammarList() 真的有效吗?

javascript - 在网页中使用 SVG dom

javascript - 使用 setInterval 进行字符串更新的单独动画

android - Firebase 应用内消息传递 - Android 中的 PERMISSION_DENIED(请求被阻止的问题)

javascript - 将其他文件中的值对象调用为对象值

javascript - 在对象上调用匿名函数

javascript - 映射数组返回 Unresolved promise