28

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

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

建筑思想?

4

2 回答 2

29

从长远来看,Firebase 可能有更高级的查询,所以希望它能直接支持这种事情,而无需您做任何特别的事情。在那之前,您有几个选择:

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

在 Firebase 有更高级的查询之前,如果您愿意运行一些服务器代码,#1 可能是您最好的选择。:-)

于 2012-05-11T23:16:03.477 回答
2

Google 当前进行全文搜索的方法似乎是与AlgoliaBigQueryCloud Functions for Firebase同步。

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

于 2017-07-28T23:40:18.467 回答