【问题标题】:Algolia Instant Search Firebase Cloud Function - how to get the other value?Algolia Instant Search Firebase Cloud 功能 - 如何获得其他价值?
【发布时间】:2017-11-13 05:20:49
【问题描述】:

我对 JavaScript 不太了解,所以我使用了Algolia's Instant Search for Firebase Github Repository 来构建自己的函数。

我的功能:

exports.indexentry = functions.database.ref('/posts/{postid}/text').onWrite(event => {
  const index = client.initIndex(ALGOLIA_POSTS_INDEX_NAME);
  const firebaseObject = {
    text: event.data.val(),
   timestamp: event.data.val(),
    objectID: event.params.postid
  };

在以时间戳为键的 Algolia 索引中,我得到的值与文本字段中的值相同,但在 Firebase 后端时间戳中不同。如何解决这个问题?

我尝试了不同的语句来获取时间戳值但不能。

编辑

预期结果

{
    text: "random rext",
    timestamp: "time stamp string",
    author: "author name",
    object ID: "object ID"
}

实际结果

{
    text: "entered text",
    object ID: "object ID"
}

【问题讨论】:

  • 答案可以在here找到。

标签: javascript node.js firebase firebase-realtime-database algolia


【解决方案1】:

event.data.val() 返回整个 firebase 快照。如果你想在你的数据中添加一个特定的值,你可以在 .val() 之后添加它,例如,如果每个帖子都有一个作者存储在你的 firebase 数据库中,它们的键是“作者”,你可以使用 var postAuthor = event.data.val().author 获取这个值

我从我的代码中为感兴趣的人提供了一些示例。示例帖子如下所示:

然后在我的云函数中,我可以像这样访问数据:

const postToCopy = event.data.val(); // entire post
const table = event.data.val().group;
const category = event.data.val().category;
const region = event.data.val().region;
const postKey = event.data.val().postID;

【讨论】:

    【解决方案2】:

    编辑 2: 可以在 here 找到答案。

    原答案: Bob Snyder 关于时间戳事件的说法是正确的。

    可能还有其他字段,例如我们可能需要索引的作者姓名,是否有通用的方法可以做到这一点,或者我是否为每个字段编写单独的函数?

    如果您想要一种添加所有字段的通用方法,我想您可以在here 找到您要查找的内容。这应该为您提供正确的指导来获得您想要的东西,即将您的整个对象保存到 Algolia 索引中。

    编辑:

    index.saveObject(firebaseObject, function(err, content) {
        if (err) {
          throw err;
        }
        console.log('Firebase object indexed in Algolia', firebaseObject.objectID);
      });
    

    【讨论】:

    • 我确定也有办法修改它,由于某些原因我无法运行另一个,当我尝试运行它时,现有功能停止运行。我在我的代码中进行了随机命中和试用更改,我开始获得完整的对象,但由于另一个错误,我将其删除,现在我无法再次这样做。
    • 并且addOrUpdateIndexRecord() 正在运行,状态为ok,但我仍然没有在 Algolia 中获得完整的 JSON,而 github 正在运行。
    • @BugsBuggy 感谢您的回复。我很难知道问题的确切原因是什么,因为我没有足够的信息。如果可能,您能否编辑您的问题并添加更多详细信息,例如“代码 - 预期结果 - 实际结果”?
    • 文档代码没有给出任何结果。它确实运行,正如我在日志中看到的那样。 github代码运行,我在问题中提到了预期和实际结果。
    • 我添加了预期和实际结果
    【解决方案3】:

    我不太清楚你的目标。 Event 具有时间戳属性。你试过了吗:

      const firebaseObject = {
        text: event.data.val(),
        timestamp: event.timestamp, // <= CHANGED
        objectID: event.params.postid
      };
    

    如果您想要long 而不是string,请使用Date.parse(event.timestamp)

    【讨论】:

    • 可能还有其他字段,例如我们可能需要索引的author_name,是否有通用的方法来做到这一点,或者我是否为每个字段编写单独的函数?
    • 其他人将不得不帮助你——我没有使用 Algolia 的经验,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 2018-04-23
    • 2019-04-07
    • 2018-03-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    相关资源
    最近更新 更多