我想测试我在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
我真的不知道可能出现什么问题......我已经为其他实体做了很多次。如果您有一些线索,欢迎您。
答案 0 :(得分:5)
此问题已提交给Google Cloud支持,这似乎是他们自己的问题,或者至少是尚未记录的限制。更改属性的顺序如下:
- kind: UserMatchingIndex
ancestor: no
properties:
- name: wants_male
- name: wants_dating
- name: wants_friendship
- name: wants_age
- name: age
使查询起作用。
编辑:Google支持小组提供的答案
"索引表的行首先按祖先排序,然后按属性值排序,按索引定义中指定的顺序排序。查询的完美索引(允许最有效地执行查询)按以下属性定义:
- 在相等过滤器中使用的属性
- 不等式过滤器中使用的属性(其中不能超过一个)
- 排序顺序中使用的属性
醇>这可确保查询的每个可能执行的所有结果都显示在表的连续行中。"
应尽快记录此限制。