0

要在 Firebase 或 Firestore 中执行地理查询,有 GeoFire 和 GeoFirestore 等库。但是要按距离对地理查询的结果进行排序,必须读取整个数据集,对吗?如果地理查询产生大量结果,则在按距离排序时无法对这些结果进行分页(在后端,而不是对用户),是吗?

4

1 回答 1

3

是的,为了按距离排序,您必须阅读所有属于 Geoquery 范围的结果。

原因在于此类查询的工作方式:它们返回一组位于 geohash 值范围内的文档,这些值不一定与它们到查询中心的距离相同。

这也意味着无法在按距离排序的文档列表中进行有意义的分页,因为无论如何您都需要阅读所有结果。我能想到的最好的方法是在 Cloud Functions 中实现 Geoquery,这样您就可以在那里进行排序/过滤,并且只满页的结果返回给客户端。虽然这不会节省您的成本(因为您仍在阅读该范围内的所有文档),但它将节省向用户发送文档的带宽。

要了解有关此类地理查询如何工作的更多信息,这解释了为什么它们无法按照您希望的方式进行优化,请查看我在此处的演讲视频或Jeff Delaney 网站上的这篇文章+更短的视频。

于 2019-02-09T04:10:30.180 回答