使用 Algolia 进行 Firebase 全文搜索

Firebase Full-Text Search using Algolia

我按照 this

配置了不同的 firebase 函数

。现在,这里有 firebase 全文搜索。我试图遵循它,但它似乎不完整。我已经搜索并以某种方式成功部署。但它仍然没有在 Algolia 中创建索引。有人可以告诉我正确执行此操作的步骤吗?

我在我的 firebase 项目中创建了博客文章和搜索节点,但问题仍然存在。

代码:

'use strict';

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

// Authenticate to Algolia Database.
// TODO: Make sure you configure the `algolia.app_id` and `algolia.api_key` Google Cloud environment variables.
const algoliasearch = require('algoliasearch');
const client = algoliasearch(functions.config().algolia.app_id, functions.config().algolia.api_key);

// Name fo the algolia index for Blog posts content.
const ALGOLIA_POSTS_INDEX_NAME = 'blogposts';

// Updates the search index when new blog entries are created or updated.
exports.indexentry = functions.database.ref('/blog-posts/{blogid}/text').onWrite(event => {
  const index = client.initIndex(ALGOLIA_POSTS_INDEX_NAME);
  const firebaseObject = {
    text: event.data.val(),
    objectID: event.params.blogid
  };

  return index.saveObject(firebaseObject).then(
      () => event.data.adminRef.parent.child('last_index_timestamp').set(
          Date.parse(event.timestamp)));
});

// Starts a search query whenever a query is requested (by adding one to the `/search/queries`
// element. Search results are then written under `/search/results`.
exports.searchentry = functions.database.ref('/search/queries/{queryid}').onWrite(event => {
  const index = client.initIndex(ALGOLIA_POSTS_INDEX_NAME);

  const query = event.data.val().query;
  const key = event.data.key;

  return index.search(query).then(content => {
    const updates = {
      '/search/last_query_timestamp': Date.parse(event.timestamp)
    };
    updates[`/search/results/${key}`] = content;
    return admin.database().ref().update(updates);
  });
});

查看 Firebase 节点的图像

Open Image

我们将不胜感激您的帮助。谢谢

所以我使用了 here 提供的示例代码并将其放入 Firebase 云函数中。写入数据库中的 '/blog-posts/{blogid}/text' 应该将文本下的任何值索引到 Algolia。

这里有一些地方可能会出错:

  1. 检查您的函数是否已正确放入 Firebase。您可以通过单击左侧的功能从控制台执行此操作。您应该看到两个名为 indexentrysearchentry 的函数。如果您没有看到这些函数,那么您就没有正确地将代码推送到 Firebase 云。

  2. 如果您的代码在 Firebase 云中,那么我建议将 console.log("write on blog-posts fired"); 添加到您的 searchentry 函数中。然后将更多数据写入 '/blog-posts/{blogid}/text' 下的数据库。您可以在 Firebase 控制台中查看功能日志。我注意到日志记录的显示有时会略有延迟,所以如果您没有立即看到,请耐心等待。我会向 '/blog-posts/{blogid}/text' 写入几条数据,然后在几分钟后检查日志。如果日志中有 "write on blog-posts fired",那么当您写入数据库时​​,您就知道该功能正在激活。

  3. 如果以上所有操作都正确,但您在 Algolia 中仍然没有任何数据,那么请确保您设置了 API 键。您可以使用代码 firebase functions:config:set algolia.app_id="myAlgoliaAppId" algolia.api_key="myAlgoliaApiKey" 执行此操作。您 运行 在您拥有 Firebase 云功能的目录中的终端 window 中执行此命令。您可以通过登录您的帐户来获取 API 密钥。请记住不要与任何人分享您的 API 密钥。