Python appengine:NeedIndexer错误:对于此查询和数据,内置索引的效率不够。请为此查询添加复合索引

Python appengine:NeedIndexer错误:对于此查询和数据,内置索引的效率不够。请为此查询添加复合索引,python,django,google-app-engine,google-cloud-datastore,Python,Django,Google App Engine,Google Cloud Datastore,使用django.core.paginator导入ObjectPaginator时,我遇到以下错误: NeedIndexError:内置索引 这方面的效率不够 查询并保存您的数据。请添加一个 此查询的复合索引 原始查询以以下形式编写: query = models.Cdr.all() query.filter("var1 =", var1 ) query.filter("var2 =", var2) query.filter("var3 =", var3) 当ObjectPaginator尝试

使用django.core.paginator导入ObjectPaginator时,我遇到以下错误:

NeedIndexError:内置索引 这方面的效率不够 查询并保存您的数据。请添加一个 此查询的复合索引

原始查询以以下形式编写:

query = models.Cdr.all()
query.filter("var1 =", var1 )
query.filter("var2 =", var2)
query.filter("var3 =", var3)
当ObjectPaginator尝试计数元素数时,我会遇到此异常,但仅针对var1的某些值

为什么在处理其他值时,对var1的某些值的查询会失败


对于这种情况,您有什么建议?

建议修复
needIndexer错误的一般步骤是。我认为,根据数据的数量和结构,复合索引可能不是基于您的开发而构建的(根据
var1
value的不同,复合索引可能会发生变化),但事实证明是需要的(为了避免因效率原因而中止查询,正如错误消息提示和Nick在此评论中确认的那样)在实际商店上运行时。

我遇到了这个问题。问题不在于您的代码,而在于GAE的索引系统本身。要修复它,必须在index.yaml文件中显式写入索引。这对我来说很有效,但我认为明确定义索引可能并不总能解决问题。不管怎样,我建议你


GAE不会为只有相等筛选器的查询自动生成索引。相反,它使用了一种谷歌称之为“之字形合并联接”的算法(谷歌it)。在某些情况下,该算法似乎出现故障。看起来谷歌团队正在解决这个问题,但在某些情况下它仍然会弹出。

如果出现错误消息,那是因为它由于效率低下而提前中止,而不是由于1000个结果的限制。在上面提到的帖子中:“我使用了以下过程来让事情正常工作,但没有检查以下哪一步解决了问题。这不是一个真正的答案,尤其是当appcfg.py似乎想要在生产应用服务器上更改内容时!