如何在 GQuery 中使用投影属性和相等过滤器?
How to use projection properties along with equality filter in GQuery?
我的 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
我已经能够自己重现您的错误,创建一组具有您指定的属性的实体。正如您所指出的,为了消除错误,我必须创建一个 index。同时使用多个属性的查询不会自动定义为索引,因此必须手动对其进行索引。索引是在 index.yaml
文件中定义的,它应该看起来像这样:
indexes:
- kind: Entity
properties:
- name: PID
- name: Path
- name: Value
当然,它可以包含更多索引,以防您使用任何其他不同的索引。创建此 index.yaml
文件后,您可以使用 following command:
将其上传到您的项目
gcloud datastore create-indexes index.yaml
加载需要一些时间,但一旦准备就绪,您将能够在 Datastore > Indexes tab in the Console:
中找到它
一旦显示绿色勾号,索引就可以使用了,您可以使用 GQL 查询您的数据存储区内容:
请记住,有一些 best practices 推荐用于定义索引,您应该考虑最重要的一个(为了 运行 最佳查询):
The perfect index for a query, which allows the query to be executed
most efficiently, is defined on the following properties, in order:
- Properties used in equality filters
- Property used in an inequality filter
- Properties used in sort orders
因此请确保您的索引配置与我共享的一样,并且已正确上传到您的项目中。
最后,Datastore 中有一些 limitations to projection queries,您的查询似乎不属于其中任何一个,因此在这种情况下这应该不是问题。
我的 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
我已经能够自己重现您的错误,创建一组具有您指定的属性的实体。正如您所指出的,为了消除错误,我必须创建一个 index。同时使用多个属性的查询不会自动定义为索引,因此必须手动对其进行索引。索引是在 index.yaml
文件中定义的,它应该看起来像这样:
indexes:
- kind: Entity
properties:
- name: PID
- name: Path
- name: Value
当然,它可以包含更多索引,以防您使用任何其他不同的索引。创建此 index.yaml
文件后,您可以使用 following command:
gcloud datastore create-indexes index.yaml
加载需要一些时间,但一旦准备就绪,您将能够在 Datastore > Indexes tab in the Console:
中找到它一旦显示绿色勾号,索引就可以使用了,您可以使用 GQL 查询您的数据存储区内容:
请记住,有一些 best practices 推荐用于定义索引,您应该考虑最重要的一个(为了 运行 最佳查询):
The perfect index for a query, which allows the query to be executed most efficiently, is defined on the following properties, in order:
- Properties used in equality filters
- Property used in an inequality filter
- Properties used in sort orders
因此请确保您的索引配置与我共享的一样,并且已正确上传到您的项目中。
最后,Datastore 中有一些 limitations to projection queries,您的查询似乎不属于其中任何一个,因此在这种情况下这应该不是问题。