数据存储索引不适用于 属性 即 JSON 字符串

Datastore Index Not working for property that is JSON string

Datastore 中的以下查询 return 预期的结果数:

SELECT timestamp from leadgenie_campaign_model_dev where campaign = "3667f39d-a3ff-4acb-b1ca-6f730bbc7989"

此查询由允许投影的索引支持。

但是这个没有 return 任何结果,尽管索引也存在。 attrs 是一个 JSON 字符串

SELECT timestamp, attrs from leadgenie_campaign_model_dev where campaign = "3667f39d-a3ff-4acb-b1ca-6f730bbc7989"

索引规范如下:

indexes:

- kind: leadgenie_campaign_model_dev
  properties:
  - name: campaign
  - name: attrs
  - name: timestamp

- kind: leadgenie_campaign_model_dev
  properties:
  - name: campaign
  - name: timestamp
  - name: attrs

- kind: leadgenie_campaign_model_dev
  properties:
  - name: campaign
  - name: timestamp

你的 attrs 字段是否超过 1,500 字节?这是要索引的字符串 属性 的限制。参见 https://cloud.google.com/datastore/docs/concepts/limits

解决方案是在专门为这些属性创建索引后,将子属性包含在查询中。

SELECT timestamp, attrs.score, attrs.sz from leadgenie_campaign_model_dev where campaign = "3667f39d-a3ff-4acb-b1ca-6f730bbc7989"
google.api_core.exceptions.FailedPrecondition: 400 no matching index found. recommended index is:
- kind: leadgenie_campaign_model_dev
  properties:
  - name: campaign
  - name: attrs.score
  - name: attrs.sz
  - name: timestamp