Java 在开发应用程序引擎服务器上使用datastore-index.xml

Java 在开发应用程序引擎服务器上使用datastore-index.xml,java,google-app-engine,Java,Google App Engine,在开发中,appengine服务器datastore-indexes.xml似乎不起作用。这是真的吗? 另外,我用autoGenerate=“true”创建了一个datastore-indexes.xml文件,但它没有在datastore-indexes-auto.xml中生成任何索引。为什么? <?xml version="1.0" encoding="utf-8"?> <datastore-indexes autoGenerate="true"> <da

在开发中,appengine服务器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>
这是我的刀:

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();
    }
}
公共类UserDataDao{
公共列表getUsers(int startRow、int limit、String columnName、布尔升序){
Query Query=ofy().load().type(UserData.class)
.偏移量(startRow).限值(limit);
if(columnName!=null){
查询.顺序((升序?“:“-”)+列名);
}
返回query.list();
}
public int userscont(){
返回y().load().type(UserData.class).count();
}

public UserData find(Class未创建其他索引,因为您仅查询单个属性。当您为属性@Index时,将自动创建这些索引

对于涉及多个属性(过滤和排序)的复杂查询,需要额外的索引


<强>提示:在一个实体上索引所有字段是一个坏主意,这将增加存储每个实体所需的多个写入,这将加快您的应用程序成本的快速增长,只考虑对您计划过滤的字段进行索引,排序< <强> > /p>您在DeVServer中运行查询吗?是的,但我使用ObjyFY。这不应该改变任何东西。ave autogenerate设置为true,系统应该在您运行查询时创建所有必需的索引…但确实如此。还有其他想法吗?Alex,该索引没有任何意义,请详细说明您正在运行的查询,我猜两者都不需要额外的索引。谢谢您的回答。但您知道排序不起作用的原因吗?columnName是orderColumnName我想对列表进行排序的列。您尝试按其排序的字段是否已编制索引?我想是的。它们具有索引注释。但是这些字段是否已在数据存储上编制索引?请记住,添加@Index只会影响保存的新实体。如果您在添加之前保存了一些,则必须重新保存这些字段,以便将其包含在IndexSo您可以按列筛选,但不能排序??

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();
    }
}