App Engine DataStore - 复合索引 - 数据存储索引 - 无法正常工作

时间:2013-12-11 04:34:32

标签: java google-app-engine objectify google-cloud-datastore

我无法使用复合索引搜索实体。我正在使用Objectify 4。

实体配置:

@Entity
@Unindex
class MyEntity implements Serialiable
{
    @Id String id;
    String one;
    String two;
    long three;
}

索引配置:

<datastore-indexes autoGenerate="true">
    <datastore-index kind="MyEntity" ancestor="false">
        <property name="one" direction="asc" />
        <property name="two" direction="desc" />
    </datastore-index>
</datastore-indexes>

我看到DataStore Indexes内置的索引。但是,当我使用以下查询进行搜索时,我总是得到空结果。

Objectify ofy = ObjectifyService.ofy();
Query<MyEntity> query = ofy.loader()
                           .type(MyEntity.class)
                           .filter("one", "value-one")
                           .filter("two", "value-two");
List<MyEntity> result = query.list();

response.getWriter().println("Size: " + result.size());
//^^ this is always "0" ^^

我正在使用HRD。

有没有猜到出了什么问题?顺便说一句,它曾经工作到一段时间......早在上周。现在,它无法在dev-server和实际服务器上运行。

1 个答案:

答案 0 :(得分:2)

复合索引需要索引所有涉及的属性:

@Entity
class MyEntity implements Serialiable
{
    @Id String id;
    @Index String one;
    @Index String two;
    long three;
}

当您保存实体而不将字段标记为索引时,Objectify正在保存这些实体而不在这些字段上对它们进行索引,这就是为什么您的GQL命令也会返回0结果。