0
目前我想查詢位置的實體,由兩個範圍過濾器,限制緯度和經度當前視圖過濾。谷歌數據存儲:查詢隨機實體過濾
查詢應該在隨機分佈返回實體的數量有限。按原樣查詢返回按緯度排序的集合。
Location Entity: Latitude, Longitude, ...
我的方法迄今如下:我介紹了一個隨機key屬性即類型的雙並且具有範圍[0 ... 1]。我將它存儲在每個位置實體的數據存儲,並嘗試通過該屬性進行排序:
Location Entity: Latitude, Longitude, ..., randomKey
但在執行此查詢後:
Query query = new Query("Location");
query.addSort("randomKey", Query.SortDirection.ASCENDING);
query.setFilter(latitudeRangeFilter);
query.setFilter(longitudeRangeFilter);
我得到一個拋出:IllegalArgumentException:
java.lang.IllegalArgumentException: The first sort property must be the same as the property to which the inequality filter is applied. In your query the first sort property is randkey but the inequality filter is on longitude
有人可以給我一個關於如何進行的建議嗎?我的方法是對的還是有更好的方法?
在此先感謝!
謝謝!您的答案幫了我很多:將座標存儲爲GeoSpacial類型自動解決了我的問題。通過應用矩形過濾器,我得到了位置的隨機分佈。 – alexanderb14
無論如何,這個功能只是一個alpha版本,所以我不能在app engine/production上使用它。如果沒有GeoSpacial,你有什麼想法可以實現嗎?我有一個huuge組數據,10K +的,所以我不希望查詢所有 – alexanderb14
10K +是一個小數據集:)如果你存儲長,緯度和ID,他們都會很容易融入一個單一的內存緩存的實體。因此,這可能是最便宜的解決方案:直到memcache重置爲止,全部檢索並使用(無查詢),這並不經常發生。 –