使用 gcloud 查询 google 数据存储时出现索引错误

Index error on querying google datastore using gcloud

我正在尝试为我的非 GAE 应用程序使用 google 数据存储。

为此,我使用 gcloud python 库在数据存储中创建了种类和祖先相关的实体。

还通过 WEB-INF/datastore-indexes 使用 gcd 工具更新了所有类型的数据存储索引配置。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.

这是我的数据存储-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>

我是不是漏了什么?

您的所有索引都设计用于祖先查询(请注意 ancestor=true)。但是,您的实际查询不会在特定祖先中查询。

为了回答您的特定查询,您需要索引:

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

或者,如果您确实想要查询具有特定父级的实体,请确保添加带有 Query#hasAncestor(Key parentKey) 的祖先过滤器。