我的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
答案 0 :(得分:1)
我已经能够自己创建一组具有您指定属性的实体来重现您的错误。为了摆脱错误,正如你所指出的那样,我必须创建一个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来定义索引,并且应该考虑最重要的索引(为了运行最佳查询):
查询的完美索引,允许执行查询 效率最高,按以下属性定义:
- 在相等过滤器中使用的属性
- 不等式过滤器中使用的属性
- 排序顺序中使用的属性
醇>
因此,请确保您的索引配置与我共享的索引配置相似,并且已正确上传到您的项目中。
最后,数据存储区中有一些limitations to projection queries,您的查询似乎没有落入其中任何一个,因此在这种情况下不应该是一个问题。