Грешка в индекса при заявка за хранилище за данни на Google чрез gcloud

Опитвам се да използвам google datastore за моето приложение, което не е 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
Можете ли да споделите запитванията, които се опитвате да изпълните? Datastore изисква специфични индекси за всяка заявка.   -  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