Firebase搜索数据列表

时间:2018-12-02 06:59:59

标签: firebase firebase-realtime-database

假设我有一个要存储在Firebase实时数据库中的数据列表,以后再搜索。

存储数据并查询以获得最佳性能的最佳方法是什么?

我的数据是一个名称列表(包含很多名称)。

[“ Bob”,“ Rob”,...]

请注意,我有多个客户端在给定时间内进行搜索。

1 个答案:

答案 0 :(得分:1)

如果名称应该唯一并且顺序无关紧要,则需要将它们存储为数学集。在Firebase实时数据库中,您可以将其建模为:

"usernames": {
  "Bob": true,
  "Rob": true
}

关于此模型的一些注意事项:

  • 我们使用名称作为键,这意味着每个名称在定义上都是唯一的(因为每个键在其包含的节点中只能存在一次)。
  • true值没有特定含义。由于Firebase无法存储没有值的密钥,因此仅需要它们。
  • 某些字符(例如./)不能在键中使用。如果名称包含此类字符,则必须在键中将其过滤掉(或编码)。例如,名为Jes.sie的某人必须存储为Jes.sie(有损)或例如。 Jes%2Esie(具有URL编码)。
  • 在这种情况下,您可以将原始的未经过滤/未经编码的名称存储为值。因此:"Jes%2Esie": "Jes.sie"

有关Firebase实时数据库中(文本)搜索的其他一些一般说明:

  • Firebase只能进行前缀匹配,它不支持搜索包含或以某些子字符串结尾的字符串。这意味着它可以在原始数据中搜索以B(以orderByKey().startAt("R").endAt("R\uF7FF")开头的所有内容,但不能搜索以ob结尾的所有内容。
  • 搜索区分大小写。如果要搜索不区分大小写的字符,请考虑将密钥存储为全小写:

    "usernames": {
      "bob": "Bob",
      "rob": "Rob",
      "jes%2esie": "Jes.sie"
    }
    
  • 如果您需要更好的文本搜索支持,请考虑集成第三方搜索引擎。常见的建议是Elastic-search(自托管)或Algolia(基于云)。

有关这些主题的更多信息,请参见:

相关问题