Firebase和索引/search

我正在考虑使用Firebase作为一个应用程序,应该让人们使用全文search来收集几千个对象。 我喜欢提供客户端应用程序(不必担心托pipe数据)的想法,但我不知道如何处理search。 数据将是静态的,所以索引本身不是什么大问题。

我假设我需要一些额外的服务来运行查询并返回Firebase对象句柄。 我可以在某个固定位置启动这样的服务,但是我不得不担心其可用性和可扩展性。 虽然我不希望这个应用程序有太多的stream量,但它可以在几千个并发用户达到峰值。

build筑思想?

长期来看,Firebase将会有更高级的查询,所以希望它能够直接支持这类事情,而不需要做任何特别的事情。 在那之前,你有几个select:

  1. 编写服务器代码来处理search。 最简单的方法是运行一些负责索引/search的服务器代码,正如你所提到的那样。 Firebase有一个Node.JS客户端,所以这将是一个简单的方法将服务连接到Firebase。 所有的数据传输都可能通过Firebase发生,但是您可以编写一个Node.JS服务,在Firebase的某个指定位置监视客户“search请求”,然后通过将结果集写回Firebase进行“响应”客户端消费。
  2. 将索引存储在Firebase中,客户端会自动更新。 如果你想变得聪明,你可以尝试实现一个无服务器的scheme,在客户端自动编写索引数据的索引…因此,全文search的索引将存储在Firebase中,当客户端写入一个新的项目收集,它将负责也适当更新索引。 而要进行search,客户端将直接使用索引来构build结果集。 对于想要索引存储在Firebase中的复杂对象的一个​​字段的简单情况,这对于全文search来说实际上是非常有意义的,这可能相当粗糙。 🙂
  3. 将索引存储在Firebase中,服务器代码将其更新。 您可以尝试一种混合方法,将索引存储在Firebase中,并由客户端直接使用来执行search,而不是让客户端更新索引,只要将新项目添加到集合中,就可以拥有更新索引的服务器代码。 这样,当服务器closures时,客户端仍然可以search数据。 他们可能会得到陈旧的结果,直到你的服务器赶上索引。

在Firebase进行更高级的查询之前,如果您愿意运行一些服务器代码,#1可能是您最好的select。 🙂

Google目前的全文search方法似乎与Algolia或BigQuery和Firebase的Cloud Functions同步。

以下是Firebase的Algolia全文search集成示例 ,以及可以扩展以支持完整search的BigQuery集成示例 。