如何在Google Datastore中添加综合索引?

时间:2016-03-02 09:11:57

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

我现在正在将Google Datastore用于我公司的数据库。 今天,我制作了一个索引,并成功列入了索引'。 但我所做的索引的大小和实体都是空的。

google Datastore的文档说该索引是自动生成的,但它不是。

是否有任何命令或某些事情可以生成索引?

下图是截图。

上面一个是新的。以下是已经使用过的。

enter image description here

1 个答案:

答案 0 :(得分:6)

事实上,现有实体不会自动编入索引。您必须加载并保存所有旧实体(没有索引)才能为这些实体创建必要的索引。

  

但是,请注意,将属性从未索引更改为索引   不影响任何可能在之前创建的现有实体   更改。对属性进行过滤查询不会返回   现有实体,因为实体未写入查询   创建时的索引。使实体可以访问   将来的查询,您必须将它们重写到数据存储区以便它们   将输入适当的索引。也就是说,你必须这样做   以下是每个这样的现有实体:

     

从数据存储中检索(获取)实体。写(放)实体   回到数据存储区。同样,将属性从索引更改为   unindexed仅影响随后写入数据存储区的实体。   具有该属性的任何现有实体的索引条目将   在更新或删除实体之前继续存在。避免   不需要的结果,您必须清除所有过滤的查询的代码   或者按(现在没有索引)属性排序。 (source

请注意,文档没有明确说明组合索引的相同内容。部署新的复合索引时,索引将在开发人员控制台中显示为“构建”,直到达到“服务”状态。不确定它在那里建造的是什么,我通常会重新保存所有实体,一切都按原样运行。

自动生成是一个关键字,它告诉您是否已手动创建此索引,或者在您进行需要此索引的查询时是否由开发服务器创建了该索引。这与为实体创建索引的方式和时间无关。

  

<datastore-indexes>元素具有autoGenerate属性   控制是否应该考虑此文件   自动生成索引配置。请参阅使用自动索引   配置如下。 (source

当您创建新索引并且希望所有现有实体使用此索引时,我建议您创建一个游标查询来处理此问题。通常我会在管理后端公开此查询并让查询运行,直到不再有结果为止。为什么暴露这个东西?如果你有很多实体,这个工作的运行时间可能比前端允许的60秒或后端的10分钟长。通过暴露这个我可以使用前端实例时间,而不必担心时间限制。