2016-06-11 142 views
2

我遷移這是使用MySQL到火力地堡的應用程序,並且我設法遷移幾乎所有的,只是缺少搜索的一部分,我不明白它是如何工作的。我正在嘗試在Firebase中執行以下查詢。搜索在距離

SELECT *, (6371 * acos(cos(radians(?)) * cos(radians(latitude)) * cos(radians(?) - radians(longitude)) + sin(radians(?)) * sin(radians(latitude)))) AS distance FROM usuario ORDER BY distance 

enter image description here

我想要做的就是通過我的用戶,以火力點的緯度和經度,他返回我的所有用戶訂貨最近到最遠。

注:這是不是說我在我的應用程序中使用相同的查詢,我只是覺得在谷歌,不知道這工作,但你可以得到什麼,我試圖做一個想法。 注意²:英語不是我的母語:P

回答

4

您提供的示例SQL查詢使用了Firebase中不存在的SQL功能:使用表中每行的列值計算表達式的能力然後使用該表達式的值來篩選和排序查詢結果。

我沒有看到使用Firebase執行所需查詢類型的方法。

你可能想看看Geofire library。我沒有使用它,它的功能似乎與鄰近過濾有關,而不是您需要的按距離排序功能,但也許您可以調整您的需求以利用其功能。

+0

感謝您的回答。 我認爲這個庫不再工作,因爲我試圖實現它,它要求實現「Firebase.setAndroidContext()」,這是使用Firebase的舊方法。 – Stark

+0

你說得對。 [升級正在進行中](http://stackoverflow.com/questions/37625887/how-to-update-geofire-library-to-the-latest-version),但還沒有準備好。 –

3

我同意Qbix和通常會張貼此作爲一個評論,但我想,以確保地理散列評論不會迷失在小文洗牌。

GeoFire使用Geohash代碼來創建其鍵並允許範圍匹配。對於基本的應用程序來說,這可能沒有問題,但是第二個超越美國的地方會產生很多麻煩,因爲它在赤道和Prime Meridian(英國)周圍運行得不好。有關詳細信息,請參閱Wikipedia Page on Geohash,具體爲:Edge case locations close to each other but on opposite sides of the 180 degree meridian will result in Geohash codes with no common prefix (different longitudes for near physical locations).

火力地堡是一個了不起的產品,但不是一個放之四海而皆準的所有工具。如果您需要良好的基於​​地理位置的搜索/匹配,請使用像ElasticSearch,MySQL,Algolia等直接支持它的工具。在這種情況下減少組件數量並不會降低複雜性,反而增加了複雜性。