要在Firebase或Firestore中执行地理位置查询,可以使用GeoFire和GeoFirestore之类的库。但是要按距离对那个地理查询的结果进行排序,必须读取整个数据集,对吗?如果地理查询产生大量结果,则按距离排序时,无法分页这些结果(在后端,而不是对用户)?
答案 0 :(得分:1)
否,地理位置查询无法读取整个结果集。那根本无法很好地扩展。如果您想确切了解这些查询如何能够仅使用地图坐标提取边界框结果集,则可能需要阅读有关地理哈希的工作方式。我建议阅读this blog post。
答案 1 :(得分:1)
是的,为了按距离排序,您必须阅读所有属于Geoquery范围的结果。
这样做的原因是这样的查询如何工作:它们返回一组在一定的geohash值范围内的文档,该文档的顺序不一定与它们到查询中心的距离相同。
这也意味着无法对按距离排序的文档列表进行有意义的分页,因为无论如何您都需要读取所有结果。我能想到的最好的办法是在Cloud Functions中实现Geoquery,以便您可以在那里进行排序/过滤,并且仅将结果页面的全部返回返回给客户端。虽然这并不能节省您的成本(因为您仍在读取该范围内的所有文档),但可以节省发送文档给用户的带宽。
要详细了解此类地理位置的工作原理(这解释了为什么无法按照您的意愿对其进行优化),请观看我的演讲视频here或this Jeff Delaney网站上的文章+短片。