请求与Google Cloud Datastore和Filter问题

时间:2019-03-15 10:59:31

标签: google-cloud-datastore

我目前正在google数据存储上进行一些测试,但是查询出现问题。

如果我相信文档https://cloud.google.com/datastore/docs/concepts/queries,我们可以使用EQUALS指令在多个列上实现过滤器。

但是在测试时,我从API中收到一个错误。 在数据存储区的github上搜索时,我找到了以下引用:https://github.com/GoogleCloudPlatform/google-cloud-dotnet/issues/304,它与我的问题相对应,只是对于我来说,查询看起来不错。

以下是发送的请求:

{
  {
    "kind": [{
      "name": "talk.message"
    }],
    "filter": {
      "compositeFilter": {
        "op": "AND",
        "filters": [{
            "propertyFilter": {
              "property": {
                "name": "Conversation"
              },
              "op": "EQUAL",
              "value": {
                "stringValue": "2f16c14f6939464ea687d316438ad4cb"
              }
            }
          },
          {
            "propertyFilter": {
              "property": {
                "name": "CreatedOn"
              },
              "op": "LESS_THAN_OR_EQUAL",
              "value": {
                "timestampValue": "2019-03-15T10:43:31.474166300Z"
              }
            }
          },
          {
            "propertyFilter": {
              "property": {
                "name": "CreatedOn"
              },
              "op": "GREATER_THAN_OR_EQUAL",
              "value": {
                "timestampValue": "2019-03-14T10:43:31.474175100Z"
              }
            }
          }
        ]
      }
    }
  }
}

这是API的答案:

{Grpc.Core.RpcException: Status(
      StatusCode=FailedPrecondition, 
      Detail="no matching index found. recommended index is:
              - kind: talk.message
                properties:
                - name: Conversation
                - name: CreatedOn"
     )

根据文档,这应该很好...但事实并非如此! 我想念什么?

1 个答案:

答案 0 :(得分:0)

您的查询同时包含EQUALS(在会话中)和非EQUALS过滤器(在CreatedOn上),因此您需要一个复合索引来满足该查询。因此,您的查询是有效的,但它需要一个复合索引才能运行该查询。