全文使用algolia在firestore中搜索

时间:2018-02-06 04:59:56

标签: android node.js full-text-search google-cloud-firestore algolia

我试图在Android应用程序中实现使用Cloud firestore作为数据库的全文搜索,因此在文档中他们说firestore不支持它并转到Algolia(第三方) ,最初我尝试使用algolia搜索一些示例数据并且效果很好。现在我需要将数据从firestore同步到algolia,我只获取实时数据库的文档而不是云{{1 }}。 由Algolia提供的文档,由google提供的文档, 他们给node.js函数和node.js的新东西。我找不到任何与firestore与algolia同步的教程,所以任何人都知道从哪里开始?我能够使用节点js将数据上传到firestore,我需要将数据从firestore导出到algolia。我使用google给出的node.js尝试了它。这是错误即时获取。我试过更改节点版本,但没有用。

firestore

这是我在firestore中为文档提供的文档的路径

    path.js:28
    throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'path', 'string');
    ^

TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string
    at assertPath (path.js:28:11)
    at Object.join (path.js:1244:7)
    at database (/Users/Desktop/Projects/FirebaseCLI/functions/node_modules/firebase-functions/lib/providers/firestore.js:36)
    at Object.document (/Users/Desktop/Projects/FirebaseCLI/functions/node_modules/firebase-functions/lib/providers/firestore.js:44)
    at Object.<anonymous> (/Users/Desktop/Projects/FirebaseCLI/functions/index.js:27)
    at Module._compile (module.js:660:30)
    at Object.Module._extensions..js (module.js:671:10)
    at Module.load (module.js:573:32)
    at tryModuleLoad (module.js:513:12)
    at Function.Module._load (module.js:505:3)

2 个答案:

答案 0 :(得分:0)

这是由于未设置GCLOUD_PROJECT环境变量。我在这里创建了pull request以显示更有用的错误消息。

要设置环境变量,您可以使用cross-envcross-env GCLOUD_PROJECT=whatever

答案 1 :(得分:0)

Cloud Firestore不支持本机索引编制或在文档中搜索文本字段。此外,下载整个集合以在客户端搜索字段是不切实际的。

因此,我建议一种解决方法,在某些情况下可能会有用。

在将文本保存到Firestore中之前,将其转换为数组。

现在,只需使用split即可完成此操作,因为它需要使用正则表达式:

String s = "This is a sample sentence with []s.";
String[] words = s.split("\\W+");

这将给出以下单词:{“ this”,“ is”,“ a”,“ sample”,“ sentence”,“ s”}

您可以使用array-contains运算符基于数组值进行过滤。例如:

CollectionReference dokRef = db.collection("dok");

dokRef.whereArrayContains("sentence", "sample");

此查询返回“句子”字段是包含单词样本的数组的每个dok文档。如果该数组具有要查询的值的多个实例,则该文档仅包含在结果中一次。

请告诉我是否有人有更好的主意。