Redis向量搜索场景下如何存储整数列表?
在Redis搜索中存储整数列表的解决方案
问题背景
我正在测试Redis向量搜索方案,已安装Redis服务器,创建索引结构时需要在rubrics字段存储类似[1, 22, 33]的整数列表,但当前Redis版本仅支持Number Fields、Geo Fields、Vector Fields、Tag Fields、Text Fields这几种数据类型,不清楚该如何处理。
我的索引结构代码如下:
id = NumericField(name="id") user_id = NumericField(name="user_id") title = TextField(name="title") seo = NumericField(name="seo") email = TextField(name="email") tariff = NumericField(name="tariff") cash = NumericField(name="cash") title_embedding = VectorField("embeddings", "HNSW", { "TYPE": "FLOAT32", "DIM": VECTOR_DIM, "DISTANCE_METRIC": DISTANCE_METRIC, "INITIAL_CAP": VECTOR_NUMBER, } ) rubrics = ???
可行解决方案
根据Redis搜索支持的字段类型,有两种适配的处理方式:
方案1:使用Tag Fields(推荐)
Tag Fields原生支持多值存储,完美匹配整数列表的场景。只需将整数转为字符串,用分隔符(默认是逗号)拼接后存储,Redis会自动解析为独立标签。
修改后的字段定义:
rubrics = TagField(name="rubrics", separator=",")
存储数据时,把整数列表转成逗号分隔的字符串,比如"1,22,33";查询单个整数时可直接精准匹配:
FT.SEARCH your_index_name "@rubrics:{22}"
方案2:使用TextField(备选)
若不想使用Tag Fields,也可以将整数列表转为空格分隔的字符串存入TextField,之后通过全文搜索匹配。但这种方式效率低于Tag Fields,且可能出现部分匹配的问题(比如搜索2会命中22)。
字段定义:
rubrics = TextField(name="rubrics")
存储时转成"1 22 33",查询语句示例:
FT.SEARCH your_index_name "@rubrics:22"
补充说明
Redis向量版(Redis Stack)和普通Redis的核心差异是前者预装了Redis Search、RedisJSON等模块,你当前使用的应该是带Search模块的版本,上述方案均基于Redis Search的字段类型设计,完全适配你的需求。
内容的提问来源于stack exchange,提问作者ruslaniv
相关产品推荐
相关产品推荐

