我目前正在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"
)
根据文档,这应该很好...但事实并非如此! 我想念什么?
答案 0 :(得分:0)
您的查询同时包含EQUALS(在会话中)和非EQUALS过滤器(在CreatedOn上),因此您需要一个复合索引来满足该查询。因此,您的查询是有效的,但它需要一个复合索引才能运行该查询。