在开发应用引擎服务器上使用datastore-indexes.xml

时间:2015-05-28 18:33:11

标签: java google-app-engine

似乎在开发App Engine服务器datastore-indexes.xml不起作用。这是真的吗? 另外,我使用autoGenerate =“true”创建了一个datastore-indexes.xml文件,但它没有在datastore-indexes-auto.xml中生成任何索引。为什么呢?

<?xml version="1.0" encoding="utf-8"?>
<datastore-indexes autoGenerate="true">
    <datastore-index kind="UserData" ancestor="false">
        <property name="email" direction="asc" />
        <property name="email" direction="desc" />
        <property name="lastName" direction="asc" />
        <property name="lastName" direction="desc" />
    </datastore-index>
</datastore-indexes>

已更新

有我的实体:

@Entity
@Index
public class UserData implements PersistableObject {

    @Id
    Long id;

    String email;
    String firstName;
    String lastName;
    String middleName;
    String passwordHash;
    UserType userType;
}

有我的道:

public class UserDataDao {
    public List<UserData> getUsers(int startRow, int limit, String columnName, boolean ascending) {
        Query<UserData> query = ofy().load().type(UserData.class)
                .offset(startRow).limit(limit);
        if (columnName != null) {
            query.order((ascending ? "" : "-") + columnName);
        }
        return query.list();
    }

    public int usersCount() {
        return ofy().load().type(UserData.class).count();
    }

    public UserData find(Class<? extends UserData> aClass, Long userId) {
        return ofy().load().type(aClass).id(userId).now();
    }
}

正在执行查询,但即使我只保留datastore-indexs标记,也没有创建索引。

1 个答案:

答案 0 :(得分:0)

未创建其他索引,因为您只查询单个属性。 @Index属性时会自动创建这些索引。

涉及多个属性(过滤和排序)的复杂查询将需要其他索引。

提示:为实体上的所有字段编制索引真的是一个坏主意,这将添加存储每个实体所需的几个写入,这将提高您的应用成本FAST,仅考虑索引您计划过滤的字段,排序