使用一些索引属性查询数据存储
Querying Datastore using some of the indexed properties
我正在试用 Cloud Datastore 的索引,但我无法确定解决查询所需的配置。
我创建了一些同类实体(名为 "object"),它们都具有 5 个名称相同的属性(property_0、property_1、...、property_4).然后,我为该类型创建了一个复合索引,索引了所有 5 个属性,并在最后位置设置了 property_4,因为我想对其应用不等式过滤器。
索引的定义是:
indexes:
- kind: object
ancestor: no
properties:
- name: property_0
direction: asc
- name: property_1
direction: asc
- name: property_2
direction: asc
- name: property_3
direction: asc
- name: property_4
direction: asc
我试图解决的查询将始终对 property_4 应用不等式过滤器,并且可能对某些其他属性应用过滤器。一些例子:
- SELECT * FROM object WHERE property_4 > 5 AND property_0 = true
- SELECT * FROM object WHERE property_4 > 5 AND property_4 < 10 AND
property_1 = 'approved'
- SELECT * FROM object WHERE property_4 > 8 AND
property_2 = 100 和 property_3 = 真
- SELECT * FROM object WHERE property_4 > 15 AND property_0 = true AND
property_1 = 'draft' AND property_2 = 10 AND property_3 = false
唯一有效的查询是如果我过滤索引中的 every 属性,其余查询显示错误消息 "Your Datastore does not have the composite index (developer-supplied) required for this query."
不应该所有的查询都由创建的索引解决吗?或者我是否需要为我想要应用的每个过滤器组合创建一个索引? (即一个用于过滤 property_4 和 property_0 的索引;另一个用于 property_4 和 property_1;另一个用于 property_4、property_2 和 property_3; ...)
您是对的,您需要为要应用的过滤器的每个 组合创建索引。
您可以通过以下方式在 index.yaml 文件中指定单独查询的索引:
indexes:
- kind: object
properties:
- name: property_0
- name: property_1
- name: property_2
- name: property_3
- name: property_4
- kind: object
properties:
- name: property_3
- name: property_4
- name: property_0
...
我正在试用 Cloud Datastore 的索引,但我无法确定解决查询所需的配置。
我创建了一些同类实体(名为 "object"),它们都具有 5 个名称相同的属性(property_0、property_1、...、property_4).然后,我为该类型创建了一个复合索引,索引了所有 5 个属性,并在最后位置设置了 property_4,因为我想对其应用不等式过滤器。
索引的定义是:
indexes:
- kind: object
ancestor: no
properties:
- name: property_0
direction: asc
- name: property_1
direction: asc
- name: property_2
direction: asc
- name: property_3
direction: asc
- name: property_4
direction: asc
我试图解决的查询将始终对 property_4 应用不等式过滤器,并且可能对某些其他属性应用过滤器。一些例子:
- SELECT * FROM object WHERE property_4 > 5 AND property_0 = true
- SELECT * FROM object WHERE property_4 > 5 AND property_4 < 10 AND property_1 = 'approved'
- SELECT * FROM object WHERE property_4 > 8 AND property_2 = 100 和 property_3 = 真
- SELECT * FROM object WHERE property_4 > 15 AND property_0 = true AND property_1 = 'draft' AND property_2 = 10 AND property_3 = false
唯一有效的查询是如果我过滤索引中的 every 属性,其余查询显示错误消息 "Your Datastore does not have the composite index (developer-supplied) required for this query."
不应该所有的查询都由创建的索引解决吗?或者我是否需要为我想要应用的每个过滤器组合创建一个索引? (即一个用于过滤 property_4 和 property_0 的索引;另一个用于 property_4 和 property_1;另一个用于 property_4、property_2 和 property_3; ...)
您是对的,您需要为要应用的过滤器的每个 组合创建索引。
您可以通过以下方式在 index.yaml 文件中指定单独查询的索引:
indexes:
- kind: object
properties:
- name: property_0
- name: property_1
- name: property_2
- name: property_3
- name: property_4
- kind: object
properties:
- name: property_3
- name: property_4
- name: property_0
...