C#Google Cloud DataStore查询过滤器未找到匹配的索引

时间:2018-06-19 08:06:25

标签: c# google-cloud-platform google-cloud-datastore

我在使用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

我不知道发生了什么。

任何帮助将不胜感激。

感谢阅读。

1 个答案:

答案 0 :(得分:1)

好的,我自己解决了这个问题。

消息确实显示我没有正确地为DataStore创建索引。

Here is how to create and upload the index file(index.yaml).

重置索引后,它可以正常工作。