【发布时间】:2018-06-29 23:00:50
【问题描述】:
我在 firebase 中有一个名为 users 的表,该表如下所示:
这个表的结构是:
users
|_
uid1
|_
latitude: ...
longitude: ...
name: ...
uid2
|_
latitude: ...
longitude: ...
name: ...
我想写一个名为getUserByLocation的云函数,示例请求url为https://someurl/getUserByLocation?latitude=40.45654&longitude=-86.68468,它以latitude和longitude一对为原点,然后转到users表找到 10 英里内的所有用户,然后将其返回。这似乎并不难,事实上,我有一些工作:
- 计算
latLower、latUpper、longLower和longUpper,然后画一个这样的圆圈: - 然后使用查询
...orderByChild('latitude').startAt(latLower).endAt(latUpper).once('value')...选择latitudes在范围内的用户,此时我不能考虑longitude,因为显然我只能通过一键排序结果 - 我检查从步骤 2 中选择的所有结果,如果
longitude也在范围内(在longLower和longUpper之间),那么应该返回这个用户
这种方法确实有效,但是,我在想,如果有数百万用户怎么办?这种方法只是效率不高。事实上,我写了一个脚本,创建了超过 100 万用户,然后用这种方法来选择用户,通常需要 10 多秒才能看到结果,这是不可接受的。
我的问题是,在这种情况下有什么办法可以提高搜索效率?我用谷歌搜索了ElasticSearch,但目前不知道那是什么,在这种情况下,它可以用来改进搜索吗?
【问题讨论】:
-
谁给了我反对票...。有什么理由吗?我不在乎名誉,但是投票会让这个问题被更少的人看到,至少让我知道它有什么问题?来吧,这是一个结构良好的问题
-
您听说过 GeoFire 吗? github.com/firebase/geofire-js/blob/master/docs/reference.md
-
@Callam 不,我没有,我会先阅读它,如果我对此有任何疑问,我会在这个网站上发布。但如果最终这对我的问题来说是一个可行的解决方案,我会告诉你的,谢谢!
标签: firebase search firebase-realtime-database