簡體   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