Firebase和索引/搜索

时间:2012-05-11 21:59:10

标签: firebase firebase-realtime-database

我正在考虑将Firebase用于一个应该让人们在几千个对象的集合上使用全文搜索的应用程序。我喜欢提供仅客户端应用程序的想法(不必担心托管数据),但我不知道如何处理搜索。数据将是静态的,因此索引本身并不是什么大问题。

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

建筑思想?

2 个答案:

答案 0 :(得分:29)

长期来看,Firebase会有更高级的查询,所以希望它能直接支持这类事情,而不必做任何特别的事情。在此之前,您有几个选择:

  1. 编写服务器代码来处理搜索。最简单的方法是运行一些负责索引/搜索的服务器代码,如您所述。 Firebase有一个Node.JS客户端,因此这是将服务连接到Firebase的简单方法。所有数据传输仍然可以通过Firebase进行,但您可以编写一个Node.JS服务,在Firebase的某个指定位置监视客户端“搜索请求”,然后通过将结果集写回Firebase进行“响应”,客户消费。
  2. 将索引存储在Firebase中,客户端会自动更新它。如果您想变得非常聪明,可以尝试实现无服务器方案,客户端在写入数据时会自动索引数据。因此,全文搜索的索引将存储在Firebase中,当客户端将新项目写入集合时,它还将负责适当地更新索引。要进行搜索,客户端将直接使用索引来构建结果集。对于想要为Firebase中存储的复杂对象的一个​​字段编制索引的简单情况,这实际上很有意义,但对于全文搜索,这可能非常粗糙。 : - )
  3. 将索引存储在Firebase中,并更新服务器代码。您可以尝试一种混合方法,其中索引存储在Firebase中,并由客户端直接用于搜索,但不是让客户端更新在索引中,只要新项目添加到集合中,您就拥有了更新索引的服务器代码。这样,客户端仍然可以在服务器关闭时搜索数据。在您的服务器赶上索引之前,它们可能会得到陈旧的结果。
  4. 在Firebase进行更高级的查询之前,如果您愿意运行一些服务器代码,那么#1可能是您最好的选择。 : - )

答案 1 :(得分:1)

Google目前进行全文搜索的方法似乎与Algolia同步BigQueryCloud Functions for Firebase

这是Firebase的Algolia Full-text search integration example,以及可以扩展为支持完整搜索的BigQuery integration example