我想通过总结单个页面的访问量来找到总的网站访问量。
在我的Redis中,我有JSON:
{'page_name': 'home', 'visit_count' : 10}
{'page_name': 'add_to_cart', 'visit_count' : 7}
{'page_name': 'checkout', 'visit_count' : 5}
我想使用FT.AGGREATE运行一个聚合逻辑,这样就可以得到,total_visits = 10 + 7 + 5 = 22
我可以添加必要的索引,如果需要的话。
1条答案
按热度按时间prdp8dxp1#
你可以使用
FT.AGGREGATE
来实现。您必须为此至少索引一个字段。下面是一个使用您的数据的示例。
新增数据
创建索引
至少需要对一个字段进行索引。以下是几个可能的选项:
1.索引
visit_count
:1.索引
page_name
1.索引
page_name
并引用visit_count
(多行以提高可读性):请注意,我提到
visit_count
和NOINDEX
是为了快速访问,但没有索引(因此它不能在查询部分引用,但可以作为聚合的一部分引用)。查询索引
诀窍是使用一些在所有文档中都相等的虚拟字段。如果你有一个现有的,你可以使用它,但是如果没有,你可以使用
APPLY
创建一个(文档在这里):将向所有文档添加一个名为
__dummy
的字段,值为1
。这仅适用于查询上下文,不会添加到JSON对象本身。当然,任何名称和值都是可能的。对于情况1和3:
对于情况2:
输出(适用于所有情况):
编辑
显然,你可以
GROUPBY
0字段,所以APPLY
技巧是多余的。使用
对于情况1和3,或者,对于情况2:
获取输出:
使用redis-py:
备选办法
如果你不需要索引文档的其他原因,你可以使用一个LUA script来扫描所有的键,并总结这个值。如果有很多键,扫描整个键空间可能会很慢,但在修改或添加新键时,它不需要额外的内存开销和索引时间