祖先查询导致API错误4(datastore_v3:NEED_INDEX):找不到匹配的索引错误

时间:2014-05-03 18:06:19

标签: google-app-engine go

我在祖先查询方面遇到了很大的困难。

以下是有效的代码:

...
uk := datastore.NewKey(c, config.DatastoreDuelIdKind, did, 0, nil)
_, err := datastore.NewQuery(config.DatastoreQuestionInDuelKind).Ancestor(uk).GetAll(c, &roundsPlayedInDuel)
...

上述代码会产生正确的结果。现在,如果我在 config.DatastoreQuestionInDuelKind 的属性上添加订单过滤器,则查询将失败,并显示NEED_INDEX错误。

但是这个失败了:

_, err := datastore.NewQuery(config.DatastoreQuestionInDuelKind).Order("RoundNumber").Ancestor(uk).GetAll(c, &roundsPlayedInDuel)

唯一的区别是添加了订单过滤器。

现在,我在index.yaml中定义了一个索引,如下所示:

索引:

- kind: gcx_Round_Id_Duel_Id
  properties:
  - name: DId
  - name: RoundNumber

从App Engine仪表板我可以看到它正在服务。仍然得到索引错误。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您的索引缺少'祖先'属性,而您的查询似乎没有使用'DId',因此无需包含该内容:

- kind: gcx_Round_Id_Duel_Id
  ancestor: yes
  properties:
  - name: RoundNumber

您必须显式定义此索引,因为您将祖先查询与排序组合在一起 - 自动索引将允许您单独执行其中任何一个。 (因此,鉴于您正在获取所有实体,放弃查询排序然后使用代码对返回的实体进行排序可能会更有效。)