Java 不能使用具有4个FilterPredicate值的CompositeFilter

Java 不能使用具有4个FilterPredicate值的CompositeFilter,java,google-app-engine,google-cloud-datastore,Java,Google App Engine,Google Cloud Datastore,我正在建立一个程序,通过具有纬度和经度参数的GAE数据存储搜索特定地理位置块内的用户,下面是代码snipet: public Iterable<Entity> GetJSONForEntitiyNearByUsingBounds(float lng,float lat,GeoLocation.GeoLocationBoundry bound) { DatastoreService datastore = DatastoreServiceFactory.getDatas

我正在建立一个程序,通过具有纬度和经度参数的GAE数据存储搜索特定地理位置块内的用户,下面是代码snipet:

public Iterable<Entity> GetJSONForEntitiyNearByUsingBounds(float lng,float     lat,GeoLocation.GeoLocationBoundry bound)
{
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

    Filter filter_min_lngt=new FilterPredicate("lng", FilterOperator.LESS_THAN, bound.lng1);
    Filter filter_max_lngt=new FilterPredicate("lng", FilterOperator.LESS_THAN, bound.lng2);
    Filter filter_min_lat=new FilterPredicate("lat", FilterOperator.GREATER_THAN, bound.lat1);
    Filter filter_max_lat=new FilterPredicate("lat", FilterOperator.LESS_THAN, bound.lat2);

    Filter filter_lng=new CompositeFilter(CompositeFilterOperator.AND,Arrays.asList(filter_min_lngt,filter_max_lngt));
    Filter filter_lat=new CompositeFilter(CompositeFilterOperator.AND,Arrays.asList(filter_min_lat,filter_max_lat));


    Filter filter=new CompositeFilter(CompositeFilterOperator.AND,Arrays.asList(filter_lng,filter_lat));

    q.setFilter(filter);

    PreparedQuery pq = datastore.prepare(q);


    return pq.asIterable();
}
public Iterable getjsonforentiynearby使用边界(float lng、float lat、GeoLocation.GeoLocationBoundry边界)
{
DatastoreService datastore=DatastoreServiceFactory.getDatastoreService();
Filter Filter_min_lngt=新的Filter预测(“lng”,Filter operator.LESS_-THAN,bound.lng1);
Filter Filter_max_lngt=新的FilterPredicate(“lng”,FilterOperator.LESS_-THAN,bound.lng2);
Filter Filter\u min\u lat=新的FilterPredicate(“lat”,FilterOperator.GREATER\u,bound.lat1);
Filter Filter\u max\u lat=新的FilterPredicate(“lat”,FilterOperator.LESS\u THAN,bound.lat2);
Filter Filter\u lng=新的复合过滤器(复合过滤器操作符.AND,Arrays.asList(过滤器最小值,过滤器最大值));
Filter Filter_lat=new CompositeFilter(CompositeFilter operator.AND,Arrays.asList(Filter_min_lat,Filter_max_lat));
Filter Filter=new CompositeFilter(CompositeFilterOperator.AND,Arrays.asList(Filter\u lng,Filter\u lat));
q、 设置过滤器(过滤器);
PreparedQuery pq=数据存储。prepare(q);
返回pq.asIterable();
}
问题是,当我循环查询以提取实体时,会出现以下消息 java.lang.IllegalArgumentException:每个查询只支持一个不等式筛选器。遇到lng和lat

有人能帮我吗,因为我不知道问题出在哪里参见:它明确规定不平等文件管理器一次只能在一处房产上使用

您的问题的解决方案是地理哈希:

请参阅:它明确指出,一次只能在一个属性上使用不平等文件管理器

您的问题的解决方案是地理哈希: