我想查询我的数据集以查找在日期范围和位置范围(geohash范围)内出现的结果。我正在努力寻找一个好的解决方案。
我正在使用GeoFire,并尝试了各种按日期或位置分类数据的方法。每天都可以轻松构建一个节点,并在其中构建地基哈希,但是例如,如何在不下载所有5000个结果的情况下分页浏览这些数据,例如在纽约市呢?
如果我可以先在geohash上排序,然后在日期上排序,这很容易实现,但是我不能在firebase或任何NoSQL数据库中做到这一点。
一定有人遇到了这种多范围查询问题,希望您能分享所学到的知识。
谢谢
答案 0 :(得分:0)
每天为每个节点构建一个节点并在其中散布geohash很容易,但是例如我如何才能在不下载所有5000个结果的情况下分页浏览这些数据呢?
如果我误解了你的问题,请告诉我。您能否为代表特定日期的节点构造一个DatabaseReference,创建一个GeoFire对象和一个GeoQuery,并每天重复一次?
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("path/to/dayNode");
GeoFire geoFire = new GeoFire(ref);
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(37.7832, -122.4056), 0.6); // Use this for addGeoQueryEventListener() or something else
// See https://github.com/firebase/geofire-java
这将使您只能下载37.7832,-122.4056附近的0.6公里内的位置。为了防止一次下载太多结果,请从较小的半径开始,然后从此处增加?
作为附带说明,我相信Firebase Firestore允许使用多种光标条件,例如:
db.collection("locations")
.orderBy("locationhash")
.orderBy("date")
.startAt(locationHash, startDate)
.limit(25);
不幸的是,除非您扩展在GeoFire或GeoFirestore中完成的工作,否则我认为您无法在按日期和分页进行排序时指定半径。希望其他人有更好的主意。