【问题标题】:How To Structure Data For Auto-Complete Search in Firebase如何在 Firebase 中为自动完成搜索构建数据
【发布时间】:2019-11-10 14:41:17
【问题描述】:

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

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

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

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

我想问一下这种类型的结构化数据对于所提出的问题是否有意义?有没有更好的方法呢?

提前致谢!

【问题讨论】:

  • 您预计有多少用户以及此用户列表的更改频率?
  • 我希望提出一个可扩展的结构,但一开始我不希望用户数量超过 500。而且我想在有新用户时使用 Cloud Functions 更新用户列表已创建。

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


【解决方案1】:

firestore 不支持按键搜索,您需要找到备用的第 3 方,例如 AlgoliaApp Engine Search

两者都有一个慷慨的免费层,你甚至不需要以复杂的方式安排你的收藏,看看 this article 让你开始,还有 this specific android api。

对于您提到的用户数量,免费套餐应该很适合您的情况。

【讨论】:

  • 谢谢,这些资源帮助很大!
猜你喜欢
  • 1970-01-01
  • 2017-01-24
  • 2018-06-30
  • 2019-05-01
  • 2020-04-25
  • 2016-06-13
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
相关资源
最近更新 更多