排序和过滤在谷歌应用引擎中无效

时间:2016-10-13 16:36:07

标签: java google-app-engine google-cloud-datastore

我添加的代码片段用于过滤和排序数据存储记录,

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
        Filter propertyFilter =
                new FilterPredicate("stockId", FilterOperator.EQUAL, stockId);
        com.google.appengine.api.datastore.Query q = new com.google.appengine.api.datastore.Query("MessageEntity")
                .setFilter(propertyFilter).addSort("messageId", SortDirection.ASCENDING);

         List<Entity> results=
                    datastore.prepare(q).asList(FetchOptions.Builder.withLimit(10));

如果我删除

  

addSort(&#34; messageId&#34;,SortDirection.ASCENDING)

查询效果与预期相符,但如果添加上行App引擎不会给出任何响应。我错过了什么?

2 个答案:

答案 0 :(得分:0)

这是因为你的财产&#34; messageId&#34;没有编入索引。您可以将其编入索引(并重新保存所有现有实体),或者在您自己的代码中对查询结果进行排序。

对代码进行排序可能是一个更好的选择,因为它不需要额外的复合索引,这需要更多的空间来支付。

答案 1 :(得分:0)

您需要使用复合索引。查看此页面https://cloud.google.com/appengine/docs/java/datastore/entities

此外,如果您检查日志appengine为您提供了一个非常明确的问题解释,它还建议您添加正确的复合索引以添加到datastore.indexes.xml