#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.