使用Algolia进行Firebase全文搜索

时间:2017-04-18 12:14:52

标签: firebase algolia

我按照this

配置了不同的firebase功能

。现在在这里,有firebase全文搜索。我试图遵循它但似乎不完整。我已经搜索并以某种方式在部署方面取得了成功。但它仍未在Algolia创造指数。有人能告诉我正确执行此操作的步骤吗?

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

CODE:

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

见火焰底座的图像

Open Image

我们将不胜感激。感谢

1 个答案:

答案 0 :(得分:2)

因此,我使用了提供的示例代码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',然后在几分钟后我会检查日志。如果日志有"写在已发布的博客帖子上#34;在其中,您知道在写入数据库时​​正在激活该功能。

  3. 如果以上所有操作都正确并且您仍未在Algolia中获得任何数据,请确保设置API密钥。您可以使用代码firebase functions:config:set algolia.app_id="myAlgoliaAppId" algolia.api_key="myAlgoliaApiKey"执行此操作。您可以在具有Firebase云功能的目录内的终端窗口中运行此命令。您可以通过登录自己的帐户来获取API密钥。切记不要与任何人分享您的API密钥。