我添加的代码片段用于过滤和排序数据存储记录,
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引擎不会给出任何响应。我错过了什么?
答案 0 :(得分:0)
这是因为你的财产&#34; messageId&#34;没有编入索引。您可以将其编入索引(并重新保存所有现有实体),或者在您自己的代码中对查询结果进行排序。
对代码进行排序可能是一个更好的选择,因为它不需要额外的复合索引,这需要更多的空间来支付。
答案 1 :(得分:0)
您需要使用复合索引。查看此页面https://cloud.google.com/appengine/docs/java/datastore/entities
此外,如果您检查日志appengine为您提供了一个非常明确的问题解释,它还建议您添加正确的复合索引以添加到datastore.indexes.xml