繁体   English   中英

如何使用带有 Dapr 的查询 state 获取所有条目?

[英]How to get all entries using query state with Dapr?

我在 Dapr 中使用 state 商店来保存和从 Redis 使用 .NET 客户端获取项目,它工作正常。 现在我需要使用查询 state 获取所有条目 我尝试了不同的 forms 查询:

var query1 = """
    {
      "filter": {}
    }
    """;
var query2 = """
    "filter": {}
    """;
var query3 = "{}";

var queryResult = await daprClient.QueryStateAsync<Product>("statestore", query, cancellationToken: ct);

但是我经常failed query in state store statestore: query index not found

Dapr.DaprException: Query state operation failed: the Dapr endpointed indicated a failure. See InnerException for details.
       ---> Grpc.Core.RpcException: Status(StatusCode="Internal", Detail="failed query in state store statestore: query index not found")
         at Dapr.Client.DaprClientGrpc.QueryStateAsync[TValue](String storeName, String jsonQuery, IReadOnlyDictionary`2 metadata, CancellationToken cancellationToken)

查询的正确形式是什么? 还是我需要初始化商店? 我在文档中没有找到任何关于此的内容。

您首先需要运行启用了 2 个模块的 Redis 版本:

  1. RediSearch:功能齐全的搜索引擎
  2. RedisJSON:原生 JSON 数据类型

这可以通过使用此docker命令来完成:

 docker run --name redis2 -d -p 6380:6379 redislabs/redismod

接下来,将查询索引添加到您的 Dapr 配置中,如此所述。

例子:

  metadata:
  - name: redisHost
    value: "localhost:6380"
  - name: queryIndexes
    value: |
      [
        {
          "name": "orgIndx",
          "indexes": [
            {
              "key": "person.org",
              "type": "TEXT"
            },
            {
              "key": "state",
              "type": "TEXT"
            }
          ]
        }
      ]  

最后,在您的查询中,添加元数据以指示应将哪个索引用于该特定查询,如下所示:

Dictionary<string, string> metadata = new() { "contentType", "application/json" }, { "queryIndexName", "orgIndx" } };
var queryResult = await daprClient.QueryStateAsync<Product>("statestore", query, cancellationToken: ct, metadata: metadata);

确保在写入操作期间至少传递contentType元数据。

完成后,您的查询将起作用。 密切关注这个GH 问题并点赞,因为这显然不是一个很好的开发人员体验 ootb。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM