如何对用户数据进行建模并使用平均值等聚合器计算聚合?

最后更新于 2024 年 4 月 15 日

问题

如何对用户数据进行建模并使用平均值等聚合器计算聚合?

回答

为了以允许查询用户平均值或任何其他受支持的聚合器(计数、最小值、最大值等)的方式对用户数据进行建模,您可以参考以下示例。让我们存储用户数据,包括用户的年龄:您将学习如何计算平均年龄。

  1. 插入数据。例如,您可以为每个用户创建一个带有唯一键的 Redis 哈希。例如,您可以使用键格式“user:{user_id}”。
  2. 将用户属性存储在哈希中,包括用户的年龄。例如,您可以使用哈希中的“age”字段来存储每个用户的年龄值。
  3. 在用户哈希的“age”字段上创建搜索索引。您可以使用FT.CREATE命令来创建索引。将“age”字段的字段类型设置为 NUMERIC。
  4. 要查询用户的平均年龄,您可以使用FT.AGGREGATE命令,并使用 REDUCE 函数来计算所有用户哈希中“age”字段的平均值。您可以指定要搜索的索引以及用于计算平均值的聚合函数。

以下是如何使用 Redis 命令完成此操作的示例

# Store user data in Redis hashes
HSET user:1 age 38
HSET user:2 age 42
HSET user:3 age 33

# Create an index on the 'age' field
FT.CREATE users_idx ON HASH PREFIX 1 user: SCHEMA age NUMERIC

# Query for the average age of the users
FT.AGGREGATE users_idx "*" GROUPBY 0 REDUCE AVG 1 @age AS avg_age

FT.AGGREGATE 命令将计算所有结果的平均值并返回

1) (integer) 12) 1) "avg_age"
   2) "37.6666666667"

使用 APPLY 参数,可以计算数学转换并近似结果,从而剥离小数部分。

FT.AGGREGATE users_idx "*" GROUPBY 0 REDUCE AVG 1 @age AS avg_age APPLY ceil(@avg_age) AS ceil_avg_age 
1) (integer) 1
2) 1) "avg_age"
   2) "37.6666666667"
   3) "ceil_avg_age"
   4) "38"

Redis 提供强大的查询功能和聚合函数,可在索引字段上执行各种计算。有关可用功能和查询语法的更多信息,请参阅文档

参考资料

分组、投影和聚合函数 FT.AGGREGATE