我无法使用复合索引搜索实体。我正在使用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和实际服务器上运行。
答案 0 :(得分:2)
复合索引需要索引所有涉及的属性:
@Entity
class MyEntity implements Serialiable
{
@Id String id;
@Index String one;
@Index String two;
long three;
}
当您保存实体而不将字段标记为索引时,Objectify正在保存这些实体而不在这些字段上对它们进行索引,这就是为什么您的GQL命令也会返回0结果。