我有一个字符串,例如:“我的名字是约翰”存储在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中是否有更简单的方法,
答案 0 :(得分:1)
不幸的是,Firebase不支持通过这样的内容进行搜索(在任何语言SDK中)。从2016年7月Google Groups Post开始:
作为一家了解搜索的公司,我们也是一家公司 了解使用最佳工具。用于模糊匹配和 包含,NoSQL,实时数据存储不是正确的工具 - 这些 查询会很慢并且扩展性很差。 BigQuery或ElasticSearch是 正确的工具,可在可扩展和强大的环境中提供有用的结果 方式。
现在,这涉及部署一个小节点脚本来同步你的 使用实时数据搜索结果,如文章中所述 使用示例Flashlight库。在未来,它会变得更多 随着我们在Firebase和Cloud之间添加集成,“毫不费力” 产品,尤其是云功能和BigQuery互操作性。
据我所知,BigQuery并非专为面向用户的搜索而设计。
Elasticsearch(具体来说,Firebase插件Flashlight
)是一个潜在的解决方案,但正如您所提到的,这是一个令人难以置信的开销(部署/管理或租用ES群集,配置插件等) 。如果内容搜索是您的应用程序中足够重要的一部分来证明时间/ $,那么您可能需要考虑Firebase之外的解决方案以满足您的数据库需求,因为它是服务最薄弱的领域之一。
在我看来,除了Flashlight
之外,您还有一些选择:
Algolia,一个搜索即服务提供商,does offer integration with Firebase,但我从来没有使用它&所以不能提供比说存在更多的东西。
另一种选择可能是维护您要在其他服务上搜索的文档集合,例如AWS Cloud Search
取决于您项目的阶段&您的需求,请考虑其他后端即服务,以便在查询方面提供更多支持。例如,GraphQL-as-a-service后端,如Scaphold.io,Graph.cool和Reindex都是基于SQL数据库构建的,并且(我相信)都支持多种类型的查询。