在Google App Engine中为Python的扩展属性自动创建索引
谷歌的应用引擎Python SDK提供了一种叫做Expando的对象类型,这种对象可以用来给一个对象添加动态属性,并且这些属性可以保存到数据库中。
不过,应用引擎要求在上传应用到谷歌服务器之前,任何需要搜索或排序的属性都必须先创建索引。这听起来很奇怪,因为这就意味着我需要提前知道用户会在我的对象上创建哪些属性。如果我提前知道这些,为什么不直接把它们定义为我现有模型中的静态属性呢?
有没有人知道如何在上传到应用引擎之后,自动为Expando模型的动态属性创建索引?如果没有,能不能告诉我为什么谷歌应用引擎会把Expando宣传为动态结构,而实际上却不能让你创建可以被搜索或排序的新属性,只能创建那些不能被搜索或排序的属性。
1 个回答
4
所有的属性都会自动为简单查询建立索引。这里的简单查询指的是:
- 只使用相等过滤器,没有排序或不等过滤器。
- 在单个字段上有不等过滤器或排序,没有其他过滤器。
如果你想进行更复杂的查询,比如同时使用不等和相等过滤器的查询,那你就需要自己建立一个自定义索引。
在运行时是无法建立自定义索引的。如果你想使用扩展属性,必须确保你执行的查询符合上述的某种情况。