将索引添加到已存在于Google App Engine数据存储区中的实体属性

时间:2016-01-03 23:10:16

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

我知道您应该将@Index添加到实体模型中的所有属性以添加索引,但是如果您忘记并且实体已经在数据存储区中实时写入了该怎么办?

有没有办法通过开发人员控制台或其他方式手动将索引添加到所有这些属性?

我发现如果你将@Index添加到你的实体并重新部署项目,那么该实体的所有新写入都会将该属性编入索引。但是,该属性的所有现有写入都不会被索引(因此,不可搜索)。

1 个答案:

答案 0 :(得分:0)

将实体写入数据存储区时会更新索引。为了确保为现有实体更新索引,一种方法是读取每个实体并立即将其写回 - 确实代价高昂,但是批量执行(例如在计划任务中)可以正常工作。

你没有提到你正在使用哪种语言 - 我知道它不是Python,因为那里没有@index。在Python中,当我使用新索引更新index.yaml并上传它时,App Engine负责为我重新编制索引(可能需要一段时间,但是,它确实“单独发生”)。

无论您喜欢哪种语言,您都可以利用Python运行时的这一功能,因为App Engine允许应用程序的各个模块(共享相同的数据存储区)使用不同的语言 - 只需在Python中添加模块,再现您的模型使用Python的ndb,并使用index.yaml,就像您在使用全Python应用程序一样......应该可以正常工作,唯一的困难是“挖掘内部”任何层次'重新使用数据存储区(客观化或其他)以Python术语对模型进行逆向工程。