使用 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。
这里有一些地方可能会出错:
检查您的函数是否已正确放入 Firebase。您可以通过单击左侧的功能从控制台执行此操作。您应该看到两个名为 indexentry
和 searchentry
的函数。如果您没有看到这些函数,那么您就没有正确地将代码推送到 Firebase 云。
如果您的代码在 Firebase 云中,那么我建议将 console.log("write on blog-posts fired");
添加到您的 searchentry
函数中。然后将更多数据写入 '/blog-posts/{blogid}/text'
下的数据库。您可以在 Firebase 控制台中查看功能日志。我注意到日志记录的显示有时会略有延迟,所以如果您没有立即看到,请耐心等待。我会向 '/blog-posts/{blogid}/text'
写入几条数据,然后在几分钟后检查日志。如果日志中有 "write on blog-posts fired",那么当您写入数据库时,您就知道该功能正在激活。
如果以上所有操作都正确,但您在 Algolia 中仍然没有任何数据,那么请确保您设置了 API 键。您可以使用代码 firebase functions:config:set algolia.app_id="myAlgoliaAppId" algolia.api_key="myAlgoliaApiKey"
执行此操作。您 运行 在您拥有 Firebase 云功能的目录中的终端 window 中执行此命令。您可以通过登录您的帐户来获取 API 密钥。请记住不要与任何人分享您的 API 密钥。
我按照 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。
这里有一些地方可能会出错:
检查您的函数是否已正确放入 Firebase。您可以通过单击左侧的功能从控制台执行此操作。您应该看到两个名为
indexentry
和searchentry
的函数。如果您没有看到这些函数,那么您就没有正确地将代码推送到 Firebase 云。如果您的代码在 Firebase 云中,那么我建议将
console.log("write on blog-posts fired");
添加到您的searchentry
函数中。然后将更多数据写入'/blog-posts/{blogid}/text'
下的数据库。您可以在 Firebase 控制台中查看功能日志。我注意到日志记录的显示有时会略有延迟,所以如果您没有立即看到,请耐心等待。我会向'/blog-posts/{blogid}/text'
写入几条数据,然后在几分钟后检查日志。如果日志中有 "write on blog-posts fired",那么当您写入数据库时,您就知道该功能正在激活。如果以上所有操作都正确,但您在 Algolia 中仍然没有任何数据,那么请确保您设置了 API 键。您可以使用代码
firebase functions:config:set algolia.app_id="myAlgoliaAppId" algolia.api_key="myAlgoliaApiKey"
执行此操作。您 运行 在您拥有 Firebase 云功能的目录中的终端 window 中执行此命令。您可以通过登录您的帐户来获取 API 密钥。请记住不要与任何人分享您的 API 密钥。