我有一个使用数据存储区的 Google App Engine Go 应用程序。我正在尝试实现一个涉及两个属性不等式的查询。我无法使综合索引发挥作用。
这是该类型的架构:
type LicenseKeyUsage struct {
First time.Time
Last time.Time
Count int
Days int
}
这是查询的片段(lastMin 设置为时间,d 设置为整数):
aggregationCountQuery := datastore.NewQuery("LicenseKeyUsage").
FilterField("Last", ">=", lastMin).
FilterField("Days", ">=", d).
NewAggregationQuery().
WithCount("active_count")
这是我的
index.yaml
,与app.yaml
位于同一目录中:
indexes:
- kind: LicenseKeyUsage
properties:
- name: Last
- name: Days
我使用命令
gcloud app deploy index.yaml
部署索引文件,然后转到数据存储控制台等待索引准备就绪,然后更新应该索引的实体。
从控制台来看,索引未显示任何实体。
如果我尝试运行查询,则会收到以下错误:
rpc error: code = FailedPrecondition desc = The query contains range and inequality filters on multiple fields, please refer to the documentation for index selection best practices: https://cloud.google.com/datastore/docs/multiple-range-fields. One possible index to serve the query is:
- kind: LicenseKeyUsage
properties:
- name: Days
- name: Last
首先,推荐索引中的属性顺序与我在查询中的字段过滤器的顺序不匹配。我切换到该索引,但仍然遇到相同的错误。
知道这里出了什么问题吗?
我发现了这个问题的原因。索引是为默认数据库创建的,但查询针对的是非默认数据库。