我按照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);
});
});
见火焰底座的图像
我们将不胜感激。感谢
答案 0 :(得分:2)
因此,我使用了提供的示例代码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'
,然后在几分钟后我会检查日志。如果日志有"写在已发布的博客帖子上#34;在其中,您知道在写入数据库时正在激活该功能。
如果以上所有操作都正确并且您仍未在Algolia中获得任何数据,请确保设置API密钥。您可以使用代码firebase functions:config:set algolia.app_id="myAlgoliaAppId" algolia.api_key="myAlgoliaApiKey"
执行此操作。您可以在具有Firebase云功能的目录内的终端窗口中运行此命令。您可以通过登录自己的帐户来获取API密钥。切记不要与任何人分享您的API密钥。