2012-04-09 63 views
0

忽略我有一個GAE的實體,稱爲MyFile的排序順序是物化查詢

public class MyFile { 
    static enum LocationEnum {Folders, Hidden}; 
    static enum FileType {File, Folder); 
    @Id private Long id; 
    private Key<MyFile> parent; 
    private String name; 
    private LocationEnum location; 
    private FileType fType; 

    // getters and setters 
} 

,並在單獨DAO類的功能來查詢基於它們的父文件,返回按名稱排序的結果。

public List<MyFile> getFiles(Key<MyFile> parent) { 
    Query<MyFile> q1 = ofy().query(MyFile.class).filter("parent", parent).filter("location", LocationEnum.Folders).order("name"); 
    return q1.list(); 
} 

看起來我的訂單被忽略,因爲結果按ID排序。我確實發現我錯過了一些與索引有關的事情,但我注意到GAE祝福我根據位置,父母,姓名自動生成索引。所以我認爲它會起作用。

如何按名稱訂購?

回答

1

我發現了這個問題。在App Engine上執行不區分大小寫的搜索是不可能的。 GAE將按照大寫字母A-Z,然後是a-z進行排序。

+0

默認的ASCII碼順序。也就是說,如果您爲「降序」或「+」從「名稱」開始升序(「+名稱」),則可能會有訣竅。但是,我不認爲這會不區分大小寫。 – PSchuette 2016-08-01 03:58:39

0

您使用的是什麼版本的Objectify?從Objectify4開始,所有字段默認爲未索引。所以你需要用@Index註釋必要的字段。

+0

我正在使用Objectify 3.1。我嘗試添加我自己的索引到datastore-indexes.xml作爲'name'屬性,但沒有運氣。存在的3個MyFile實體具有測試(id 90),UserGuide.pdf(id 88)和defaultlogo.png(id 87)的名稱值。我是否正確地期望它們以defaultlogo.png開始按字母順序返回? – rossco 2012-04-10 04:57:03

+0

這很奇怪。當您在開發數據存儲查看器中查看實體時,是否看到'name'字段? – expert 2012-04-10 05:00:47

+0

是的,我在數據存儲查看器中看到名字。值是根據以前的評論。我是否需要將名稱作爲過濾器來按名稱排序? – rossco 2012-04-10 05:04:47