appengine: NeedIndexError: встроенные индексы недостаточно эффективны для этого запроса и ваших данных. Пожалуйста, добавьте составной индекс для этого запроса - PullRequest
2 голосов
/ 01 сентября 2009

При использовании django.core.paginator import ObjectPaginator я получаю эту ошибку:

NeedIndexError: встроенные индексы недостаточно эффективны для этого запрос и ваши данные. Пожалуйста, добавьте составной индекс для этого запроса.

Оригинальный запрос написан в такой форме:

query = models.Cdr.all()
query.filter("var1 =", var1 )
query.filter("var2 =", var2)
query.filter("var3 =", var3)

Я получаю это исключение, когда ObjectPaginator пытается подсчитать количество элементов, но только для некоторых значений var1 .

Почему этот запрос не выполняется для некоторых значений var1 при работе с другими?

Что бы вы порекомендовали для этого случая?

Ответы [ 2 ]

2 голосов
/ 01 сентября 2009

Общая процедура, рекомендованная для исправления NeedIndexError случаев, эта . Я ожидаю, что составной индекс, возможно, не был построен на вашей разработке в зависимости от объема и структуры данных (которые могут изменяться в зависимости от значения var1), но оказывается необходимым (чтобы избежать прерывания запроса по соображениям эффективности, так как сообщение об ошибке намекает, и Ник подтверждает в этом комментарии) при работе в реальном магазине.

1 голос
/ 12 июня 2011

Я столкнулся с этой проблемой. Проблема не в вашем коде, а в самой системе индексации GAE. Чтобы это исправить, вы должны явно указать индекс в вашем файле index.yaml. Это сработало для меня, но я прочитал в другом месте , что явное определение вашего индекса не всегда может это исправить. В любом случае, я рекомендую вам отметить ошибку, которую я открыл .

GAE не создает автоматически индекс для запросов, которые имеют только фильтры равенства. Вместо этого он использует алгоритм, который Google называет «зигзагообразным слиянием» (Google it). Похоже, что этот алгоритм ломается в определенных ситуациях. Похоже, команда google работает над исправлением этой проблемы, но в некоторых ситуациях она все равно появляется.

...