我对我需要结构化文档的方式感到困惑,以便在需要时按标签有效地搜索/获取项目。
也就是说,每个文档的结构如下所示:
{
name: "Delicious blackforest cake",
tags: ["blackforest","birthday","designer"]
...
}
{
name: "Red velvet cake",
tags: ["party","anniversary","designer"]
...
}
...
总共有32个标签,我想根据标签来取蛋糕,这是我现在的结构,我觉得取蛋糕的效率很低。
例如,我想根据标签和蛋糕名称进行搜索
如果我搜索de
,搜索建议应该是:
*设计师蛋糕/* This is based on a tag */
- 美味的黑森林蛋糕
/* This is based on an actual name */
据我所知,我想这在Firebase中很难实现。我应该选择MongoDB还是应该改变文档的结构?
我想根据我的上述需求有效地搜索和获取的建议。
1条答案
按热度按时间f2uvfpb91#
Firestore可以用于此用例,
array-contains
操作符可以用于查询tags
数组包含特定值的文档。如果您的用例需要查找具有多个标记的文档,那么您可能必须使用map而不是array。
MongoDB有一个
$all
操作符可用于此操作,如下所示:对于全文搜索,您必须使用documentation中提到的搜索服务以获得最佳结果。(据我所知使用Apache Lucene),它只能在您将数据库托管在Atlas上时使用,否则您将不得不依赖
$text
运算符。Firestore Algolia Extension应该为您完成大部分工作,并让您使用Algolia的所有全文搜索功能。此外,如果您将Algolia与Firestore一起使用,则可以获得对filtering by tags更好的支持,这样您就不必使用map来代替前面提到的array。