Firestore - 在 orderby geoHash 之后无法根据另一个字段对文档进行排序

Firestore - After orderby geoHash not able to sort documents based on another field

示例:根据评分计数获取我周围评分最高的餐厅

(假设该地区有 10,000 家餐馆,因此必须使用限制)

我在 Java 中的查询:

ref.orderBy("geoHash")
     .orderBy("count", Query.Direction.DESCENDING)
     .startAt(startHash)
     .endAt(endHash)
     .limit(limit) 

但即使对于单个 GeoQueryBound,它也无法按预期工作。

示例文档:

item1 : {
geoHash : tsp1
count : 100
}
item2 : {
geoHash : tsp1
count : 200
}
item3 : {
geoHash : tsp2 
count : 300
}

现在,如果我们 运行 上述查询的地理范围为 tsp0 - tsp3,限制为 2

预期结果:[item3,item2]

实际结果:[item2, item1]

这是 Firestore 的限制吗?是否有任何解决方法。

查询首先在 geoHash 上排序,然后才在 count 上排序,因此计数仅影响 geohash 相同的文档的结果。由于 item1item2 具有最低的 geohash 值,它们首先出现在索引中并被正确返回。

没有有效的方法在数据库上执行此查询,除非您找到一种方法将计数合并到 geohash 值中,以便将它们按照您希望的顺序放入索引中。虽然这 可能 是可能的,但更有可能的解决方法是仅在 geohash 上进行过滤,然后在您的应用程序代码中通过计数获得最佳结果。