语言:Python。
我正在使用数据存储区python lib,一切正常。使用数据存储区查询对查询结果进行排序时,我可以添加query.order = ['name'];
对结果进行排序。但是当查询祖先的表时,例如:
ancestor = client.key('user', name, namespace = NAMESPACE)
query = client.query(kind='project', ancestor=ancestor, namespace = NAMESPACE)
然后我设置了订单:query.order = ['name'];
,它不起作用。我想对种类project
进行排序,其祖先是种类user
。
错误消息是:“ 400未找到匹配的索引。推荐的索引是:↵-种类:项目↵祖先:是↵属性:↵-名称:名称”,这是一个Yaml示例。但是我在这里不使用yaml。我认为,尽管有祖先,但必须有一种对结果进行排序的方法。
答案 0 :(得分:0)
所有数据存储区查询均基于索引。来自Indexes:
每个Google Cloud Datastore query都使用一个计算其结果 或更多个包含按以下顺序指定的实体键的索引 索引的属性,以及实体的祖先。的 索引被更新以反映应用程序所做的任何更改 它的实体,以便可以使用所有查询的正确结果 无需进一步的计算。
您得到的错误来自数据存储区,这表明您的特定查询所需的索引在数据存储区中丢失。这与执行祖先查询和/或在应用程序代码中使用yaml无关。
yaml参考仅来自将索引部署到数据存储区的方式(这是您要执行查询才能执行的操作),请参阅Deploying or deleting indexes。
因此,您需要创建一个index.yaml
文件,至少包含错误消息中指示的索引规范(以及其他查询可能需要的其他任何索引,如果有的话),将其部署到数据存储区,等待在Indexes页面上进入Serving
状态的索引(可能需要一段时间),之后您的查询应该工作。