使用 Redis 执行分面搜索是否可行?
最后更新于 2024 年 4 月 24 日
问题
使用 Redis 执行分面搜索是否可行?
回答
分面搜索帮助您通过 Redis 数据库中的属性(或分面)对数据进行分类。您可以使用 FT.AGGREGATE 命令实现分面搜索。在此示例中,我们将存储五个按不同类别分类的文档。索引创建如下。
FT.CREATE doc_idx PREFIX 1 doc: SCHEMA category TAG content TEXT title TEXT
文档可以存储为哈希(JSON 文档也适用)。
HSET doc:1 title "How to perform vector search with Redis" content "..." category "docs"
HSET doc:2 title "Configure Redis durability" content "..." category "docs"
HSET doc:3 title "Reduce memory consumption" content "..." category "kb"
HSET doc:4 title "Addressing performance tuning" content "..." category "kb"
HSET doc:5 title "Getting started with the C#/.NET NRedisStack client library" content "..." category "training"
然后我们可以按类别获取存储的文档数量概览。
FT.AGGREGATE doc_idx * GROUPBY 1 @category REDUCE COUNT 0 AS num_per_ctg SORTBY 2 @num_per_ctg DESC
1) (integer) 3
2) 1) "category"
2) "docs"
3) "num_per_ctg"
4) "2"
3) 1) "category"
2) "kb"
3) "num_per_ctg"
4) "2"
4) 1) "category"
2) "training"
3) "num_per_ctg"
4) "1"
并检索特定类别中的所有文档。
FT.SEARCH doc_idx '@category:{docs}' RETURN 1 title LIMIT 0 10
1) (integer) 2
2) "doc:2"
3) 1) "title"
2) "Configure Redis durability"
4) "doc:1"
5) 1) "title"
2) "How to perform vector search with Redis"
并包含附加过滤器,例如针对术语 "vectors
" 的文本过滤器,以执行全文搜索。
FT.SEARCH doc_idx 'vectors @category:{docs}' RETURN 1 title LIMIT 0 10
1) (integer) 1
2) "doc:1"
3) 1) "title"
2) "How to perform vector search with Redis"
参考资料
- 了解有关 FT.AGGREGATE 命令的更多信息
- 分组、投影和聚合函数