寻找一种廉价的方法将全文搜索添加到firestore

问题描述 投票:0回答:2

这就是我想做的事情

假设我有一个带有 firestore 后端的 Angular Dart 应用程序,例如存放书籍。每本书都有标题、摘要和出版日期。现在我想向我的应用程序添加带分页的全文搜索。由于 firestore 没有全文搜索功能,如果我想要按出版日期排序包含“cat”的前 10 本书,我需要自己添加此内容。

失败的尝试

我的第一个想法是使用 Elasticsearch docker 容器并将其部署在 Google Cloud 上。最初我尝试在 Google Kubernetes 上执行此操作,但除了有点过于复杂之外,它似乎成本太高。 接下来,我使用 docker 查看了 Google App Engine,但这似乎仍然高达每月 60 美元,因为 Elasticsearch 容器需要 4GB 内存。

所以现在我不知道该怎么办。研究一下 Google Compute Engine 并在虚拟机内运行 docker。我想知道这要花多少钱?或者也许编写一些东西来从 Google App 实例与 Google Cloud Search 交互,以某种方式公开结果?

所有这一切对于我想做的事情来说似乎太复杂了。我可能有大约 1000 本书需要索引,数据量可能高达 10MB,而每月只有几千个查询。

angular dart full-text-search google-cloud-firestore
2个回答
1
投票

Algolia 似乎是适合您的用例的完美/最佳解决方案。它的设置非常简单,而且速度快如闪电。查看他们的文档和定价并亲自测试一下。还有一个您可能感兴趣的示例 firestore 函数


0
投票

如果您不想使用 algolia 和 Typesense 等服务,并且不需要任何人工智能或预构建工具,那么我有一个使用列表的简单解决方案。

为了实现此解决方案,您需要用空格分割字符串并排除某些单词,例如“as”、“is”、“the”、“a”、“this”、“that”、连词和指示词代词。然后,您可以将字符串列表添加到图书文档内的 Firestore 文档中。使用适当的方法确保包含所有相关的现场数据,以便通过文字搜索文档。

搜索时,使用“array-contains-any”而不是“==”,并像 Firebase 文档字段一样拆分查询。请参阅下面的示例。

我希望这对您找到所需的内容有所帮助。如果您需要任何进一步的帮助,请告诉我。

var bookCollectionName = 'bookCollectionName';
    var wordListFieldName = 'wordlistfieldname';
    var bookSearchQueryWordList = ['your', 'search', 'query', 'words'];

    var collectionRef = $firebaseFirestore.collection(bookCollectionName);
    var query = collectionRef.where(wordListFieldName, 'array-contains-any', bookSearchQueryWordList);

query.get().then(function(querySnapshot) {
        querySnapshot.forEach(function(doc) {
            // Handle the document data here
            console.log(doc.id, ' => ', doc.data());
        });
    }).catch(function(error) {
        console.error('Error getting documents: ', error);
    });

注意:根据你的名字更改你的集合名称和字段名称

© www.soinside.com 2019 - 2024. All rights reserved.