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

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

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

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

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

最佳答案

当实体写入数据存储时,索引会更新。为确保为现有实体更新索引,一种方法是读取每个实体并将其写回——当然成本很高,但分批执行(例如在计划任务中)会奏效。

您没有提到您使用的是哪种语言——我知道它不是 Python,因为那里没有 @index。在 Python 中,当我用新索引更新 index.yaml 并上传它时,App Engine 会负责为我重新编制索引(这可能需要很长时间,但它确实“自行发生”)。

无论您喜欢哪种语言,您都可以利用 Python 运行时的这一特性,因为 App Engine 允许应用程序的不同模块(共享相同的数据存储区)使用不同的语言——只需在 Python 中添加一个模块,重现在 Python 的 ndb 中创建您的模型,并使用 index.yaml,就像您在做一个全 Python 应用程序时一样……应该可以正常工作,唯一的困难是“深入挖掘”任何内容您在数据存储之上使用的层(对象化或其他)以 Python 术语对您的模型进行逆向工程。

关于google-app-engine - 将索引添加到已存在于 Google App Engine 数据存储区中的实体属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34582702/

相关文章:

java - 如何使用 maven 更改在 GAE 中上传的项目?

google-app-engine - 如何使用 Google Datastore MultiQueryBuilder 加载所有同类实体?

python - 更新谷歌云数据存储python中实体的一个属性

java - 如何将 List<entity> 添加或放入 GAE memcache 编程语言 Java?

android - GCM 和特殊字符

java - 如何在 JUnit 测试中引发 DatastoreTimeoutException 或/和 DatastoreFailureException?

google-app-engine - 在 GAME 中查看 memcached 项目

google-app-engine - GAE 标准迁移到 Go 1.11/1.12 后的缓存

java - Junit 测试无法访问本地 junit 测试中的 GAE 数据存储

python - Google App Engine 投影查询