繁体   English   中英

使用一些索引属性查询数据存储

[英]Querying Datastore using some of the indexed properties

我正在尝试 Cloud Datastore 的索引,但我无法确定解决查询所需的配置。

我创建了一些相同类型的实体(名为“对象”),它们都具有 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 * 来自 object 其中 property_4 > 5 AND property_0 = true
  • SELECT * 来自 object 其中 property_4 > 5 AND property_4 < 10 AND property_1 = '已批准'
  • SELECT * 来自 object 其中 property_4 > 8 AND property_2 = 100 AND property_3 = true
  • SELECT * 来自 object 其中 property_4 > 15 AND property_0 = true AND property_1 = 'draft' AND property_2 = 10 AND property_3 = false

唯一有效的查询是,如果我过滤索引中的每个属性,它们的 rest 会显示错误消息“您的数据存储没有此查询所需的复合索引(开发人员提供)”。

不应该所有查询都由创建的索引解决吗? 或者我是否需要为我想要应用的每个过滤器组合创建一个索引? (即过滤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

...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM