我现在正在将Google Datastore用于我公司的数据库。 今天,我制作了一个索引,并成功列入了索引'。 但我所做的索引的大小和实体都是空的。
google Datastore的文档说该索引是自动生成的,但它不是。
是否有任何命令或某些事情可以生成索引?
下图是截图。
上面一个是新的。以下是已经使用过的。
答案 0 :(得分:6)
事实上,现有实体不会自动编入索引。您必须加载并保存所有旧实体(没有索引)才能为这些实体创建必要的索引。
但是,请注意,将属性从未索引更改为索引 不影响任何可能在之前创建的现有实体 更改。对属性进行过滤查询不会返回 现有实体,因为实体未写入查询 创建时的索引。使实体可以访问 将来的查询,您必须将它们重写到数据存储区以便它们 将输入适当的索引。也就是说,你必须这样做 以下是每个这样的现有实体:
从数据存储中检索(获取)实体。写(放)实体 回到数据存储区。同样,将属性从索引更改为 unindexed仅影响随后写入数据存储区的实体。 具有该属性的任何现有实体的索引条目将 在更新或删除实体之前继续存在。避免 不需要的结果,您必须清除所有过滤的查询的代码 或者按(现在没有索引)属性排序。 (source)
请注意,文档没有明确说明组合索引的相同内容。部署新的复合索引时,索引将在开发人员控制台中显示为“构建”,直到达到“服务”状态。不确定它在那里建造的是什么,我通常会重新保存所有实体,一切都按原样运行。
自动生成是一个关键字,它告诉您是否已手动创建此索引,或者在您进行需要此索引的查询时是否由开发服务器创建了该索引。这与为实体创建索引的方式和时间无关。
<datastore-indexes>
元素具有autoGenerate属性 控制是否应该考虑此文件 自动生成索引配置。请参阅使用自动索引 配置如下。 (source)
当您创建新索引并且希望所有现有实体使用此索引时,我建议您创建一个游标查询来处理此问题。通常我会在管理后端公开此查询并让查询运行,直到不再有结果为止。为什么暴露这个东西?如果你有很多实体,这个工作的运行时间可能比前端允许的60秒或后端的10分钟长。通过暴露这个我可以使用前端实例时间,而不必担心时间限制。