索引和查询文档

了解如何将 Redis 查询引擎与 JSON 和哈希文档一起使用。

本示例展示了如何为 JSON 文档创建搜索索引并针对该索引运行查询。然后,它继续展示了哈希文档等效代码中的细微差异。

初始化

确保您已安装 Redis 开源版或可用的其他 Redis 服务器。如果尚未安装 go-redis 客户端库,请安装它。

添加以下依赖项

创建数据

创建一些测试数据以添加到您的数据库。下方显示的示例数据与 JSON 和哈希对象兼容。

添加索引

连接到您的 Redis 数据库。以下代码显示了最基本的连接,但请参阅连接到服务器以了解更多可用的连接选项。

注意

示例中的连接选项在 Protocol 字段中指定了 RESP2。我们建议您在 go-redis 中使用 RESP2 进行 Redis 查询引擎操作,因为默认 RESP3 的某些响应结构目前不完整,因此您必须在自己的代码中处理“原始”响应。

如果您确实想使用 RESP3,连接时应设置 UnstableResp3 选项

rdb := redis.NewClient(&redis.Options{
    UnstableResp3: true,
    // Other options...
})

您还必须使用 RawResult()RawVal() 方法而不是通常的 Result()Val() 来访问命令结果

res1, err := client.FTSearchWithArgs(
    ctx, "txt", "foo bar", &redis.FTSearchOptions{},
).RawResult()
val1 := client.FTSearchWithArgs(
    ctx, "txt", "foo bar", &redis.FTSearchOptions{},
).RawVal()

使用以下代码创建搜索索引。FTCreateOptions 参数仅为键具有 user: 前缀的 JSON 对象启用索引。索引的 schema 包含用户姓名、年龄和城市的三个字段。FieldSchema struct 的 FieldName 字段指定了用于标识要索引的数据字段的 JSON 路径。使用 As struct 字段为 JSON path 表达式提供别名。您可以在查询中使用别名作为引用表达式的简短直观方式,而不是完整输入它

添加数据

将三组用户数据作为 JSON 对象添加到数据库。如果您使用带有 user: 前缀的键,则 Redis 将在您添加对象时自动为其建立索引

查询数据

您现在可以使用索引搜索 JSON 对象。以下查询搜索在任何字段中包含文本“Paul”且 age 值在 30 到 40 范围内的对象

指定查询选项以仅返回 city 字段

您也可以使用相同的查询,并启用 CountOnly 选项,以获取找到的文档数量,而不返回文档本身。

使用聚合查询计算每个城市中的所有用户。

与哈希文档的差异

哈希文档的索引与 JSON 索引非常相似,但您需要指定一些稍微不同的选项。

创建哈希索引的 schema 时,无需为字段添加别名,因为无论如何您都使用基本名称访问字段。此外,创建索引时必须在 FTCreateOptions 对象中将 OnHash 设置为 true。以下代码展示了这些更改,使用了一个名为 hash-idx:users 的新索引,该索引与前面示例中用于 JSON 文档的 idx:users 索引在其他方面相同。

您使用 HSet() 添加哈希文档而不是 JSONSet(),但相同的平面 userX maps 对于哈希或 JSON 同样适用

这里的查询命令对于哈希和 JSON 的工作方式相同(但哈希索引的名称不同)。结果的格式几乎相同,只是字段直接在结果的 Document 对象 map 中返回(对于 JSON,字段都包含在键“$”下的字符串中)

更多信息

请参阅Redis 查询引擎文档,了解所有查询功能的完整说明和示例。

评价此页面
返回顶部 ↑