代码之家  ›  专栏  ›  技术社区  ›  Terry Wei

C谷歌云数据存储查询过滤器未找到匹配索引

  •  0
  • Terry Wei  · 技术社区  · 8 年前

    我在使用谷歌云数据存储查询时遇到了一个奇怪的情况。

    这是我的代码:

    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
    

    这让我想到了财产 创建 是关键。

    但当我只使用 创建 不过,效果很好。

    var query = new Query("message")
                {
                Filter = Filter.And(
                    Filter.GreaterThanOrEqual("created", cutoff))
                };
    // works fine too
    

    我不知道发生了什么事。

    任何帮助都将不胜感激。

    谢谢你的阅读。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Terry Wei    8 年前

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

    消息确实表明我没有正确地为数据存储创建索引。

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

    在我重新设置索引之后,它可以像我预期的那样正常工作。