Создан индекс хранилища данных Google App Engine, но все еще есть исключение DatastoreNeedIndexException

#google-app-engine #google-cloud-datastore

#google-app-engine #google-cloud-хранилище данных

Вопрос:

Я создал тип с именем User в хранилище данных Google App Engine, и я пытаюсь добавить индекс для этого типа.

Во-первых, я последовал https://cloud.google.com/appengine/docs/standard/java/config/indexconfig для создания индекса путем добавления datastore-indexes.xml внутри war / WEB-INF, но это не работает, индекс не создается после развертывания в app engine.

Затем я последовал https://cloud.google.com/appengine/docs/standard/python/config/indexref , Я создал index.yaml и запустил gcloud app deploy index.yaml , на этот раз я вижу индекс, созданный в консоли GCP, как показано ниже.

Индекс отображается в консоли GCP

Но я все еще получил исключение, как показано ниже:

 Uncaught exception from servlet
com.google.appengine.api.datastore.DatastoreNeedIndexException: 
no matching index found. recommended index is:
- kind: User
  properties:
  - name: area
  - name: coins_balance

The suggested index for this query is:
    <datastore-index kind="User" ancestor="false" source="manual">
        <property name="area" direction="asc"/>
        <property name="coins_balance" direction="asc"/>
    </datastore-index>
  

Я искал в Google «индекс создан, но по-прежнему получено исключение DatastoreNeedIndexException», но не нашел никакой полезной информации.

Пожалуйста, кто-нибудь может помочь, спасибо.

Ответ №1:

Порядок свойств в индексе имеет значение. На скриншоте показан индекс для
- kind: User
properties:
- name: coins_balance
- name: area
, который вы действительно хотите:
- kind: User
properties:
- name: area
- name: coins_balance

Таким образом, вы можете либо изменить свой запрос, чтобы он соответствовал вашему существующему индексу, либо вы можете создать индекс, соответствующий рекомендуемому индексу.

Комментарии:

1. Спасибо, это действительно работает. Но я все еще не понимаю, почему datastore-indexes.xml не работает, теперь это работает только при запуске «gcloud app deploy index.yaml» с настройкой индекса, введенной в index.yaml.