java.lang.IllegalArgumentException:第一个排序属性必须是 与应用不等式过滤器的属性相同。 在您的查询中,第一个排序属性是投票但不平等 过滤器在createdDate
上
当我尝试运行下面的代码时出现此错误。有没有解决这个问题?
Query query = new Query("Post");
long timeAgo = now - timeLimit;
Filter categoryFilter = new FilterPredicate("postCategory", FilterOperator.EQUAL, category);
Filter createdDateFilter = new FilterPredicate("createdDate", FilterOperator.GREATER_THAN, timeAgo);
Filter compositeFilter = CompositeFilterOperator.and(categoryFilter, createdDateFilter);
query.setFilter(compositeFilter);
query.addSort("vote", SortDirection.DESCENDING);
List<Entity> postsEntityList = datastore.prepare(query).asList(FetchOptions.Builder.withOffset(offset).limit(limit));
上面的代码试图根据其类别和过去24小时内创建的人员重新检查Post实体列表。然后根据他们有多少票来对它们进行排序。它也有限制和抵消分页。
答案 0 :(得分:2)
为避免错误,您唯一的选择是添加多个排序顺序,如下所示:createdDate作为第一个排序顺序:
.addSort("createdDate", SortDirection.ASCENDING)
.addSort("vote", SortDirection.DESCENDING);
但是这将有一个限制,即结果将无法根据您的第二个属性进行正确排序,因此您将在客户端进行其他排序。请阅读此earlier post以了解此行为
答案 1 :(得分:1)
当您应用不等式过滤器(在您的情况下为GreaterThan)时,您必须首先应用用于过滤器的相同字段。
如果你有
Filter createdDateFilter = new FilterPredicate("createdDate", FilterOperator.GREATER_THAN, timeAgo);
然后你必须先为同一个字段订购
.addSort("createdDate", SortDirection.ASCENDING)
稍后您可以应用其他类别,例如
.addSort("createdDate", SortDirection.ASCENDING)
.addSort("vote", SortDirection.DESCENDING);