2

我的 gquery 是这样的:

SELECT  Distinct Path,Value FROM Entity WHERE PID="chichi"

我得到错误

GQL query error: Your Datastore does not have the composite index (developer-supplied) required for this query.

我知道我正在使用具有相等查询的投影,我在 index.yaml(复合索引文件)中添加了路径、值和计划 ID。如何在 gcloud 数据存储上执行此查询?

我在 index.yaml 文件中包含了所有可能的组合

index.yaml:
indexes:
- kind: Entity
  properties:
  - name: PID  
  - name: Value
  - name: Path
4

1 回答 1

1

我已经能够自己创建一组具有您指定的属性的实体来重现您的错误。正如您所指出的,为了摆脱错误,我必须创建一个index。同时使用多个属性的查询不会自动定义为索引,因此必须手动对其进行索引。索引在index.yaml文件中定义,看起来应该像这样:

indexes:
- kind: Entity
  properties:
  - name: PID
  - name: Path
  - name: Value

当然,如果您使用任何其他不同的索引,它可以包含更多索引。创建此文件后,您可以使用以下命令index.yaml将其上传到您的项目:

gcloud datastore create-indexes index.yaml

加载需要一些时间,但一旦准备就绪,您将能够在控制台的 Datastore > Indexes 选项卡中找到它:

在此处输入图像描述

显示绿色勾号后,索引将准备就绪,您可以使用 GQL 查询您的数据存储区内容:

在此处输入图像描述

请记住,有一些推荐用于定义索引的最佳实践,以及您应该考虑的最重要的一个(为了运行最佳查询):

查询的完美索引,允许最有效地执行查询,按以下属性定义:

  1. 相等过滤器中使用的属性
  2. 不等式过滤器中使用的属性
  3. 排序顺序中使用的属性

因此,请确保您的索引配置看起来像我共享的配置,并且已正确上传到您的项目。

最后,Datastore 中的投影查询存在一些限制,您的查询似乎不属于其中任何一个,因此在这种情况下应该不是问题。

于 2018-02-02T09:15:03.167 回答