数据存储:无法识别复合索引

时间:2016-12-06 13:23:28

标签: python-2.7 google-compute-engine google-cloud-datastore

我编写了一段代码,根据一个过滤器(以及同一属性上的顺序)从数据存储区添加和检索实体 - 运行正常。但是当我尝试为更多属性添加过滤器时,我得到了:

  

PreconditionFailed:412找不到匹配的索引。推荐指数为:
- 种类:温度
属性:
- 名称:DeviceID
- 名称:创建

最终我发现我需要创建index.yaml。我看起来像这样:

indexes:
- kind: Temperature
  ancestor: no
  properties:
  - name: ID
  - name: created
  - name: Value

似乎可以认识到,正如控制台所示: that it has been updated 然而,当我运行我的代码(特别是这部分有两个属性)时,它不起作用(仍然得到上述错误)(代码在计算引擎上运行)。

query.add_filter('created', '>=', newStart)
query.add_filter('created', '<', newEnd)
query.add_filter('DeviceID', '=', devID)
query.order = ['created']

尝试在控制台上运行相同的查询生成

  

您的数据存储区没有此查询所需的复合索引(开发人员提供)。

error.搜索显示另一个人有同样的问题,他设法通过更改index.yaml中属性的顺序来修复它,但这对我的情况没有帮助。有没有人遇到类似的问题或者可以帮我解决问题?

1 个答案:

答案 0 :(得分:1)

您需要创建错误消息中建议的确切索引:

- kind: Temperature
  ancestor: no
  properties:
  - name: DeviceID
  - name: created

具体来说,索引中的第一个属性需要是DeviceID而不是ID,索引中的最后一个属性需要是您在不等式过滤器中使用的属性(所以你不能将Value作为索引中的最后一个属性。)