缺少应用引擎中特定实体的索引

时间:2016-04-22 17:53:50

标签: google-app-engine google-cloud-datastore google-cloud-platform

我在app引擎中有实体,我查询为:

foo = Foo.all().filter('bar =', baz).get()
#baz is unicode, bar is a StringProperty
#Foo inherits from db.Model

这适用于大多数实体,但对于baz的某些值,即使实体确实存在,也不会返回任何实体,因为可以在https://console.cloud.google.com/datastore/entities/验证。原因是该特定实体< / em> bar的值没有索引,正如“索引”中没有选中标记所证明的那样。该网页上的专栏。

docs状态

  

自动创建简单查询的索引,例如单个属性上的查询

所以我原以为该类型的所有实体都会在该属性上有一个索引,但显然这是不正确的。问题:

Q1:创建索引时,它是否添加到第一次使用该索引运行查询之前放置的实体? (或者是第一次放置该类型的任何实体时创建的索引?)

Q2:如果没有,实体的更改(如果有的话)将导致索引被添加到该属性? (我尝试更改bar以外的属性,放置,并且不会导致添加实体)

问题3:明确列出index.yaml中的索引会改变这种行为吗?

问题4:有没有办法以编程方式确定某个实体是否有特定属性的索引?

问题5 :(奖金)是否有关于上述内容的谷歌文档?

感谢

2 个答案:

答案 0 :(得分:3)

Q1)当您编写具有该属性的第一个实体(indexed = true)时,将自动创建单个属性的索引。但是,是否将属性添加到索引是在写入时设置的实体/属性级别属性。

Q2)每个属性都有一个标志,告诉后端是否应该索引属性。如果你读取实体并将其写回bar上的标志设置为true,它将被插入进入指数。

Q3)index.yaml仅适用于复合索引(多属性索引)。当您编写/更新实体并且不需要预先配置时,各个属性由属性级别标志控制。

Q4)只有回读每个实体并检查相关财产的索引标志。

Q5)对于复合索引,您可以阅读Datastore Indexes。对于属性索引,请阅读“属性和值类型”部分中的Entities, Properties, and Keys page - 您将看到很多有关索引的内容。

答案 1 :(得分:1)

您要存储的数据的长度是多少? Documentation说:

  

短字符串(最多1500个字节)被编入索引,可用于查询过滤条件和排序顺序。

     

长字符串(最多1兆字节)未编入索引,无法在查询过滤器和排序顺序中使用。

有关索引创建的更多信息here及其“相关文章”。