2012-12-11 21 views
1

谷歌应用程序引擎查询我有一个部署GAE应用程序,我已经注意到,我有这个简单的查询:没有指数

MBObject.query(MBObject.groupId == group.id).fetch() 

groupIdndb.StringProperty(indexed=True)

看着我index.yaml中的文件甚至在我的GAE仪表板(位于appengine.google.com)中的数据存储索引中,此属性的索引也未列出。这通常意味着我在上传之前没有在开发模式下测试整个应用程序,所以我不得不手动插入索引。

但是,查询工作得很好。它将成功返回所有我想要的对象。我想知道的是这是如何可能的?为什么即使通过groupId查询也没有在我的index.yaml和我的仪表板中列出?它不应该提出一些错误?

回答

5

GAE会自动索引所有实体,并且您的查询不需要index.yaml中的特定索引定义,因为您只查询一个属性(即使您要查询多个属性也不会创建任何属性)。

如果你单子这种查询可以通过一个date物业说,它会创建index.yaml索引定义,如果你将在SDK中运行它,或者你可以手动写他们。

docs

由应用程序作出的每项数据存储区查询需要一个相应 索引。简单查询的索引(如单个 属性上的查询)会自动创建。复杂查询的索引必须在名为index.yaml的配置文件中定义 。此文件是 与应用程序一起上载以在数据存储区中创建索引。

+0

哦等一下,所以如果我按日期属性排序或查询涉及多个属性,那么它需要明确定义吧? – Snowman

+0

这个'nose plugin'会在你运行你的测试时创建索引:https://github.com/jkrebs/nose-gae-index – aschmid00

+0

看到我更新的答案。 – aschmid00