Cloud Functions for Firebase to index Firebase Database Objects in Algolia

纵饮孤独 提交于 2019-12-11 09:12:53

问题


I went through docs, github repositories but nothing worked for me yet.

My datastructure:

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

1) Github repository : If I use this, I only get one field from one function, if I need all the fields, I would need to write separate functions for each, which is a bad approach.

2) Algolia Official Docs for Node.js : This cannot be deployed as a cloud function, but it does what I intend to do.

How can I write a function that can be deployed on Firebase and gets the whole object indexed with its key in Algolia?


回答1:


Okay so I went ahead to create a Firebase Cloud function in order to index all objects in the Algolia index. This is the solution:

What you were doing is something like this:

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

What you should do is the following:

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)));
});

The difference is in the first line: In the first case, you only listen to text changes, hence you only get the data containing the text change. In the second case, you get the whole object since you listen to changes in all of the blog object (notice how /text was removed).

I tested it and it works for me: whole object including author was indexed in Algolia.



来源:https://stackoverflow.com/questions/44532715/cloud-functions-for-firebase-to-index-firebase-database-objects-in-algolia

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!