2016-10-13 97 views
-1

下面的代碼片斷我已經添加用於過濾工作和排序的數據存儲區的記錄,排序和篩選沒有在谷歌應用程序引擎

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(「MESSAGEID」, SortDirection.ASCENDING)

查詢運行良好,但如果添加上面的行,App引擎不會給出任何響應。我在這裏錯過了什麼?

回答

0

發生這種情況是因爲您的屬性「messageId」未編入索引。您可以將其編入索引(並重新保存所有現有實體),也可以在自己的代碼中對查詢結果進行排序。

對代碼進行排序可能是一個更好的選擇,因爲它不需要一個額外的組合索引,它需要更多的空間,你必須付費。

+0

我已經添加@ MessageEntity的messageId上的索引是否不夠? –

+0

它只適用於新實體。您必須重新保存現有實體以使它們重新編制索引。 –

+0

ohhh ...謝謝...我會再次檢查。對於索引,我正在檢查https://cloud.google.com/appengine/docs/flexible/java/configuring-datastore-indexes-with-index-yaml哪裏嚴格我需要把它放在我的項目和任何模式建議? –