Google数据存储区错误:找不到匹配的索引

时间:2016-04-20 17:36:20

标签: google-app-engine google-cloud-datastore

我想测试我在Google数据存储区中创建的新实体。我尝试使用不等式执行GQL查询来检索数据存储区Web界面中的某些实体:

  

SELECT * FROM UserMatchingIndex WHERE age< 25 AND wants_male = false AND wants_dating = false AND wants_friendship = false AND wants_age = 20

但我总是有错误:" GQL查询错误:您的数据存储区没有此查询所需的复合索引(开发人员提供的)。"而我已经定义了所需的复合索引!

  

UserMatchingIndex:年龄▲wants_male▲want_dating▲want_friendship▲want_age▲服务

     

UserMatchingIndex:年龄▲want_female▲want_dating▲want_friendship▲want_age▲服务

这些在index.yaml:

中定义如下
- kind: UserMatchingIndex
  ancestor: no
  properties:
  - name: age
  - name: wants_male
  - name: wants_dating
  - name: wants_friendship
  - name: wants_age

- kind: UserMatchingIndex
  ancestor: no
  properties:
  - name: age
  - name: wants_female
  - name: wants_dating
  - name: wants_friendship
  - name: wants_age

我真的不知道可能出现什么问题......我已经为其他实体做了很多次。如果您有一些线索,欢迎您。

1 个答案:

答案 0 :(得分:5)

此问题已提交给Google Cloud支持,这似乎是他们自己的问题,或者至少是尚未记录的限制。更改属性的顺序如下:

- kind: UserMatchingIndex
  ancestor: no
  properties:
  - name: wants_male
  - name: wants_dating
  - name: wants_friendship
  - name: wants_age
  - name: age

使查询起作用。

编辑:Google支持小组提供的答案

  

"索引表的行首先按祖先排序,然后按属性值排序,按索引定义中指定的顺序排序。查询的完美索引(允许最有效地执行查询)按以下属性定义:

     
      
  1. 在相等过滤器中使用的属性
  2.   
  3. 不等式过滤器中使用的属性(其中不能超过一个)
  4.   
  5. 排序顺序中使用的属性
  6.         

    这可确保查询的每个可能执行的所有结果都显示在表的连续行中。"

应尽快记录此限制。