我在GAE应用程序中有以下模型。
class User
school_name = db.StringProperty(Indexed=True)
country = db.StringProperty(Indexed=True)
city = db.StringProperty(Indexed=True)
sex = db.StringProperty(Indexed=True)
profession = db.StringProperty(Indexed=True)
joined_date = db.DateTimeProperty(Indexed=True)
我希望通过这些字段的组合来过滤用户。过滤器的结果应该首先向用户显示最近加入的用户。因此,我认为这意味着任何查询都按订单操作结束。那样:
User.all().filter('country =','US').filter('profession =','SE').order('-joined_date')
User.all().filter('school_name =','AAA').filter('profession =','SE').order('-joined_date')
....
User.all().filter('sex =','Female').filter('profession =','HR').order('-joined_date')
所有这些字段组合将是C(5,1)+ C(5,2)+ ... + C(5,5)= 31.
我的问题是要实现它,我是否需要在Google AppEngine中为所有这些案例(31)创建索引。或者你能建议其他方式来实现吗?
注意:C(n,k)是组合公式,详见http://en.wikipedia.org/wiki/Combination
提前致谢!
答案 0 :(得分:4)
您有几种选择:
ListProperty
中,以便作为“key:value”字符串进行索引,并仅对其进行过滤。您将需要在该字段上创建具有不同出现次数的多个索引(例如,将其索引一次,两次等),这将导致相同数量的索引条目,但使用的自定义索引更少。