【问题标题】:C# Google Cloud DataStore Query Filter no matching index foundC# Google Cloud DataStore 查询过滤器未找到匹配索引
【发布时间】:2018-11-28 03:04:23
【问题描述】:

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

我不知道发生了什么。

任何帮助将不胜感激。

感谢阅读。

【问题讨论】:

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


    【解决方案1】:

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

    该消息确实表明我没有为 DataStore 正确创建索引。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      相关资源
      最近更新 更多