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

Sam*_*mon 5 indexing google-app-engine google-cloud-datastore

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

谷歌数据存储区的文档说该索引是自动生成的,但事实并非如此.

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

下图是截图.

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

在此输入图像描述

kon*_*nqi 6

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

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

从数据存储中检索(获取)实体.将实体写回(放入)数据存储区.同样,将属性从索引更改为未索引仅会影响随后写入数据存储区的实体.在更新或删除实体之前,具有该属性的任何现有实体的索引条目将继续存在.为避免不必要的结果,您必须清除所有通过(现在未编入索引)属性进行筛选或排序的查询的代码.(来源)

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

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

<datastore-indexes>元素具有autoGenerate属性,该属性控制是否应将此文件与自动生成的索引配置一起考虑.请参阅下面的使用自动索引配置 (来源)

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