C# Google Cloud DataStore 查询过滤器找不到匹配的索引
C# Google Cloud DataStore Query Filter no matching index found
我在使用 Google Cloud DataStore 查询时遇到了一个奇怪的情况。
这是我的代码:
var cutoff = DateTime.UtcNow.AddDays(-30);
var query = new Query("message")
{
Filter = Filter.And(
Filter.Equal("type", type),
Filter.Equal("receiver", receiver),
Filter.Equal("sender", sender),
Filter.GreaterThanOrEqual("created", cutoff))
};
// type is integer, receiver and sender is string
异常日志显示如下:
Grpc.Core.RpcException: Status(StatusCode=FailedPrecondition, Detail="no matching index found. recommended index is:
- kind: message
properties:
- name: receiver
- name: sender
- name: type
- name: created
")
我检查了好几次,所有的属性都确实存在。
下面显示了为什么我称之为奇怪:
当我删除 属性 created
时它工作正常:
var query = new Query("message")
{
Filter = Filter.And(
Filter.Equal("type", type),
Filter.Equal("receiver", receiver),
Filter.Equal("sender", sender)
};
// works fine
那指导我思考属性created
是重点。
但是当我只使用 created
时,它工作正常。
var query = new Query("message")
{
Filter = Filter.And(
Filter.GreaterThanOrEqual("created", cutoff))
};
// works fine too
我不知道发生了什么。
任何帮助将不胜感激。
感谢阅读。
好的,我自己解决了这个问题
该消息确实表明我没有为 DataStore 正确创建索引。
Here is how to create and upload the index file(index.yaml).
在我重置索引后,它工作正常,如我所料。
我在使用 Google Cloud DataStore 查询时遇到了一个奇怪的情况。
这是我的代码:
var cutoff = DateTime.UtcNow.AddDays(-30);
var query = new Query("message")
{
Filter = Filter.And(
Filter.Equal("type", type),
Filter.Equal("receiver", receiver),
Filter.Equal("sender", sender),
Filter.GreaterThanOrEqual("created", cutoff))
};
// type is integer, receiver and sender is string
异常日志显示如下:
Grpc.Core.RpcException: Status(StatusCode=FailedPrecondition, Detail="no matching index found. recommended index is:
- kind: message
properties:
- name: receiver
- name: sender
- name: type
- name: created
")
我检查了好几次,所有的属性都确实存在。
下面显示了为什么我称之为奇怪:
当我删除 属性 created
时它工作正常:
var query = new Query("message")
{
Filter = Filter.And(
Filter.Equal("type", type),
Filter.Equal("receiver", receiver),
Filter.Equal("sender", sender)
};
// works fine
那指导我思考属性created
是重点。
但是当我只使用 created
时,它工作正常。
var query = new Query("message")
{
Filter = Filter.And(
Filter.GreaterThanOrEqual("created", cutoff))
};
// works fine too
我不知道发生了什么。
任何帮助将不胜感激。
感谢阅读。
好的,我自己解决了这个问题
该消息确实表明我没有为 DataStore 正确创建索引。
Here is how to create and upload the index file(index.yaml).
在我重置索引后,它工作正常,如我所料。