Firebase的云功能,用于为Algolia中的Firebase数据库对象编制索引

时间:2017-06-13 22:41:12

标签: 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中的键索引整个对象?

1 个答案:

答案 0 :(得分:2)

好的,所以我继续创建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更改,因此您只能获得包含文本更改的数据。 在第二种情况下,您将获得整个对象,因为您收听了所有博客对象的更改(请注意/text如何被删除)。

我对它进行了测试,它对我有用:包括作者在内的整个对象都在Algolia中编入索引。