Google Datastore 复合索引问题

gan*_*til 5 gql google-cloud-datastore

我得到以下异常:

Exception in thread "main" com.google.cloud.datastore.DatastoreException: no matching index found. recommended index is:
- kind: cp_outbox
  properties:
  - name: format
  - name: occasion_name
  - name: sent_datetime
  - name: status
  - name: send_date
Run Code Online (Sandbox Code Playgroud)

在运行以下查询时:

SELECT * FROM cp_outbox where send_date <= '2018-03-14' and sent_datetime is null and format='test1' and status=0 and occasion_name='test'

所以我在查询中使用了不等式运算符,并且我有复合索引:

在此处输入图片说明

但我仍然得到例外。

通过查看错误,我认为属性的顺序是问题所在。如果这是真的,那么为什么这个顺序很重要。

提前致谢。

Dan*_*ath 4

在提供查询服务时,属性顺序对于复合索引绝对重要。该顺序使我们能够提供范围查询,而无需扫描索引表的大部分内容。作为一般规则,最终属性是您可以执行不等式查询的属性,然后重命名属性顺序定义order by您可以使用的子句顺序。

在您的查询中,send_date您正在执行不等式,而您现有的复合索引仅允许occasion_name.

如果您创建的复合索引与 API 返回的完全一样,您的查询将起作用。

  • 啊,最后一个属性(不等式的属性)很重要。我的测试只是翻转相等过滤器的顺序:)今天学到了一些东西...... (2认同)