firebase查询和swift

时间:2017-01-07 20:58:19

标签: swift firebase firebase-realtime-database

我有一个字符串,例如:“我的名字是约翰”存储在Firebase中。

我如何查询firebase,以便找到Firebase中有“John”的所有帖子?

我现在可以使用以下方法搜索字符串中的第一个字词:

DataService.dataService.BASE_REF.child("Posts").child(selectedComment.commentKey).queryOrderedByChild("userComment").queryStartingAtValue(comment).queryEndingAtValue(comment+"\u{F8FF}").observeSingleEventOfType(.Value, withBlock: { (snapshot) in

其中comment =“我的”

我读过有关在Firebase中使用弹性搜索但想在我查看ElasticSearch / Flashlight for Firebase之前检查Firebase中是否有更简单的方法,

1 个答案:

答案 0 :(得分:1)

不幸的是,Firebase不支持通过这样的内容进行搜索(在任何语言SDK中)。从2016年7月Google Groups Post开始:

  

作为一家了解搜索的公司,我们也是一家公司   了解使用最佳工具。用于模糊匹配和   包含,NoSQL,实时数据存储不是正确的工具 - 这些   查询会很慢并且扩展性很差。 BigQuery或ElasticSearch是   正确的工具,可在可扩展和强大的环境中提供有用的结果   方式。

     

现在,这涉及部署一个小节点脚本来同步你的   使用实时数据搜索结果,如文章中所述   使用示例Flashlight库。在未来,它会变得更多   随着我们在Firebase和Cloud之间添加集成,“毫不费力”   产品,尤其是云功能和BigQuery互操作性。

据我所知,BigQuery并非专为面向用户的搜索而设计。

Elasticsearch(具体来说,Firebase插件Flashlight)是一个潜在的解决方案,但正如您所提到的,这是一个令人难以置信的开销(部署/管理或租用ES群集,配置插件等) 。如果内容搜索是您的应用程序中足够重要的一部分来证明时间/ $,那么您可能需要考虑Firebase之外的解决方案以满足您的数据库需求,因为它是服务最薄弱的领域之一。

在我看来,除了Flashlight之外,您还有一些选择:

  1. Algolia,一个搜索即服务提供商,does offer integration with Firebase,但我从来没有使用它&所以不能提供比说存在更多的东西。

  2. 另一种选择可能是维护您要在其他服务上搜索的文档集合,例如AWS Cloud Search

  3. 取决于您项目的阶段&您的需求,请考虑其他后端即服务,以便在查询方面提供更多支持。例如,GraphQL-as-a-service后端,如Scaphold.io,Graph.cool和Reindex都是基于SQL数据库构建的,并且(我相信)都支持多种类型的查询。