GAE Objectify - 为什么我要在Field上添加@Index以在过滤条件中使用它

时间:2013-11-24 13:26:16

标签: google-app-engine objectify

我完全不熟悉Objectify。我正在使用Objectify进行GAE申请,我在Objectify filter条件中有一个有趣的问题

我要执行load方法来执行像

这样的过滤器
objectify.load().type(User.class).filter("email", userEmail).first().now();

我的问题是,在我将用户实体类中的email字段标记为@Index之前,上述说法不起作用?为什么需要这个? 。如果我们不在字段上放置@Index,我们会得到null结果。

有人可以澄清我的疑问,我很担心将我的字段标记为@Index,因为它可能成本 空间而且它(@Index)是其中之一候选人在GAE数据库中增长数据。

感谢SO帖子Objectify 4 Filter not working。它帮助我解决了我的问题。

2 个答案:

答案 0 :(得分:2)

GAE查询仅跟踪索引。如果不索引字段,它将不会显示在查询结果集中。这是GAE的本质。

答案 1 :(得分:0)

如上所述,您的问题实际上并不是Objectify,而是数据存储的工作原理。在不了解数据存储的基础知识的情况下,您会发现很难有效地使用客观化工作。您可以阅读常规文档here,特别是有关查询here的内容。

简短的回答是,如果您要查询的字段已为该实体编制索引,则数据存储区只能将实体与查询匹配。 Objectify为您提供了一个注释,以实现这一目标,在给定类型的所有实体中始终如一。

您必须指定要索引的每个字段的原因是在编写实体时索引具有与它们相关联的成本,因此具有细粒度控制非常重要。