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重置为止,全部检索并使用(无查询),这并不经常发生。 –