如何在Firebase中为自动完成搜索构造数据

时间:2019-06-28 16:24:41

标签: android ios firebase google-cloud-firestore google-cloud-functions

我正在创建一个社交网络应用程序,我需要找到一种适当的方法来构建Cloud Firestore数据库以存储用户。在客户端,应用程序应显示搜索栏以查找并添加其他用户。理想情况下,当您在此搜索栏上键入字符时,当您在搜索栏上实时输入更多字符时(即实现自动完成),应该显示并更新其名称以输入字符开头的用户。因此,我正在尝试找到将用户存储到Firestore的最佳方法,以简化此查询过程。

我考虑过将每个用户的完整信息存储在用户集合内的单独文档中(即每个用户只有一个文档)。如果我这样实现,则可以通过Google Cloud Functions使用内置的Firestore查询。但是,每次进行查询时,内置的Firestore查询都会扫描所有用户文档(即,如果用户数量很大,则每个用户的文档将既昂贵又效率低下)。

为了更加经济和高效,我可以有一个单独的集合(例如,指针集合),其中完整用户文档(在用户集合中)的每个用户名和ID都按字母顺序组织在文档中。例如,对于所有以“ a”开头的用户名,我可以有一个文档,该文档的字段将指示用户集合的名称和文档ID(类似于所有其他字母)。一旦给定字母的所有这些文档都满了(达到Google决定的限制),我可以简单地向其中添加一个子集合来存储其他用户名和ID,例如,通过基于用户名的前两个字符(例如“ aa”,“ ab”,“ ac”等)。

因此,我可以在指针集合中使用这些文档来快速在搜索栏上显示以给定字符开头的用户名,一旦从中选择了特定用户,我就可以使用文档ID来检索用户集中的完整用户文档(因此,我不需要浏览所有用户文档)。

我想问一下这种结构化数据是否对提出的问题有意义?还有更好的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

Firestore不支持

击键搜索,您需要找到备用的第三方,例如AlgoliaApp Engine Search

两者都有一个宽敞的自由层,您甚至不需要以复杂的方式安排您的收藏集,看看this article即可入门,还有this specific android api。

对于您提到的用户数量,免费套餐应适合您的情况,而不会出现问题。