引擎反向引用 - 需要综合指数吗?

时间:2010-06-11 17:50:40

标签: python google-app-engine google-cloud-datastore

我有一个最近开始抛出的查询:

"The built-in indices are not efficient enough for this query and your data. Please add a composite index for this query."

我检查了抛出此异常的行,问题查询就是这个:

count = self.vote_set.filter("direction =", 1).count()

这实际上是使用appengine的内置反向引用的单过滤器操作。我不知道如何优化此查询...任何人有任何建议?我试图添加这个索引:

 - kind: Vote
   properties:
   - name: direction
     direction: desc

 - kind: Vote
   properties:
   - name: direction

我收到一条消息(显然)说这是一个不必要的索引。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

反向引用实际上只构造了一个在引用属性上过滤的查询,因此通过添加另一个过滤器,您可以进行双过滤查询。

您的compsite索引如下所示:

- kind: Vote
  properties:
  - name: your_reference_property_name
  - name: direction
    direction: desc

答案 1 :(得分:3)

如果您在本地SDK上运行所有相关查询,它应该生成所有需要的索引(在index.yaml中),建议的策略不是自己编辑index.yaml而是让本地SDK执行它适合你。如果SDK没有生成所有需要的索引,那么当你在本地测试中执行所有相关的代码路径时,你应该在App Engine跟踪器here中打开它的错误(在检查之后)当然不是这个问题的错误报告。