Ошибка индекса при запросе хранилища данных Google с помощью gcloud

Я пытаюсь использовать хранилище данных Google для своего приложения, отличного от GAE.

Для этого я создал в хранилище данных объекты, связанные с видами и предками, с помощью библиотеки gcloud python.

Также обновлена ​​конфигурация индекса хранилища данных для всех видов с использованием инструмента gcd через файл WEB-INF / datastore-indexes.xml и его статус.

Однако я не могу успешно запросить столбцы на основе индекса ни в консоли, ни с помощью gcloud lib.

Вот запрос и обратная связь

from gcloud import datastore

ds = datastore.Client(dataset_id='XXXXXX')
query = datastore.Query(ds, kind='event')
query.add_filter('EvtName', '=', 'buy')
query.add_filter('EventDateTime', '<=', datetime.datetime(2015, 10, 22, 8, 45))
for itm in query.fetch():
    print(dict(itm))


gcloud.exceptions.PreconditionFailed: 412 no matching index found.

вот моя конфигурация datastore-indexes.xml

<?xml version="1.0" encoding="utf-8"?>

<datastore-indexes
  autoGenerate="false">
    <datastore-index kind="event" ancestor="true">
        <property name="EvtName" direction="desc" />
        <property name="EventDateTime" direction="desc" />
    </datastore-index>
  <datastore-index kind="att" ancestor="true">
      <property name="EvtAttName" direction="desc" />
        <property name="EventDateTime" direction="desc" />
    </datastore-index>
  <datastore-index kind="att_val" ancestor="true">
      <property name="AttValue" direction="desc" />
        <property name="EventDateTime" direction="desc" />
    </datastore-index>
  <datastore-index kind="user" ancestor="true">
        <property name="EventDateTime" direction="desc" />
    </datastore-index>
</datastore-indexes>

я что-то упускаю?


person shivg    schedule 30.10.2015    source источник
comment
Можете ли вы поделиться запросами, которые пытаетесь выполнить? Хранилище данных требует определенных индексов для каждого запроса.   -  person Patrick Costello    schedule 30.10.2015
comment
@PatrickCostello, я обновил свой вопрос запросом. пожалуйста, проверьте   -  person shivg    schedule 30.10.2015


Ответы (1)


Все ваши индексы предназначены для использования с запросами предков (обратите внимание на ancestor=true). Однако ваш фактический запрос не запрашивает конкретного предка.

Чтобы ответить на ваш конкретный запрос, вам понадобится индекс:

<datastore-index kind="event" ancestor="false">
    <property name="EvtName" direction="desc" />
    <property name="EventDateTime" direction="desc" />
</datastore-index>

Или, если вы действительно хотите запросить сущности с определенным родителем, обязательно добавьте фильтр предков с Query#hasAncestor(Key parentKey).

person Patrick Costello    schedule 30.10.2015
comment
На всякий случай я всегда стараюсь запускать все свои запросы на сервере разработчика, чтобы он сам мог сгенерировать индексы. - person Patrice; 30.10.2015
comment
неправильно понял точечные индексы для каждого запроса. Мне нужен был как запрос с предком, так и без предка. Создание отдельных индексов для одного и того же типа решает мою проблему :) - person shivg; 31.10.2015