使用部分索引属性查询Datastore。

问题描述 投票:0回答:1

我正在试用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 * FROM object WHERE property_4 > 5 AND property_0 = true...
  • SELECT * FROM object WHERE property_4 > 5 AND property_4 < 10 ANDproperty_1 = 'approved'(批准)。
  • SELECT * FROM object WHERE property_4 > 8 ANDproperty_2 = 100 AND property_3 = true。
  • SELECT * FROM object WHERE property_4 > 15 AND property_0 = true ANDproperty_1 = 'draft' AND property_2 = 10 AND property_3 = false。

唯一有效的查询是,如果我过滤了 每一 索引中的属性,其余的都显示错误信息 "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;......)

indexing google-cloud-platform google-cloud-firestore google-cloud-datastore
1个回答
1
投票

你是正确的,你需要为以下实体创建索引 每一 的组合来应用过滤器。

您可以在下面的列表中为单独的查询指定索引。索引.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

...
© www.soinside.com 2019 - 2024. All rights reserved.