RedisSearch字段类型与选项详解
RediSearch 项目地址: https://gitcode.com/gh_mirrors/red/RediSearch
RedisSearch作为Redis的全文搜索模块,提供了多种字段类型来满足不同场景下的搜索需求。本文将深入解析RedisSearch支持的各种字段类型及其配置选项,帮助开发者更好地构建高效的搜索应用。
数字类型(NUMBER)
数字类型用于存储数值数据,支持整数和浮点数。该类型特别适合需要数值范围查询的场景,如价格区间筛选、评分排序等。
基本特性
- 排序能力:支持基于数值的排序操作
- 范围查询:可执行精确或范围条件查询
- 索引控制:可选择是否建立索引
创建语法
FT.CREATE ... SCHEMA ... 字段名 NUMBER [SORTABLE] [NOINDEX]
查询示例
查找价格在200到300之间的商品:
FT.SEARCH products "@price:[200 300]"
查询操作符详解
| 运算符 | 查询语法 | 说明 | |--------|----------|------| | 全包含范围 | @字段:[min max] | min ≤ x ≤ max | | 全排除范围 | @字段:[(min (max] | min < x < max | | 大于等于 | @字段:[min +inf] | x ≥ min | | 小于等于 | @字段:[-inf max] | x ≤ max | | 等于 | @字段:[val val] | x == val | | 不等于 | -@字段:[val val] | x != val |
地理坐标类型(GEO)
地理坐标类型用于存储经纬度信息,支持地理位置相关的半径查询,非常适合LBS(基于位置的服务)应用。
核心功能
- 支持千米(km)和米(m)两种单位
- 可计算两点间的距离
- 支持排序和索引控制
创建语法
FT.CREATE ... SCHEMA ... 字段名 GEO [SORTABLE] [NOINDEX]
查询示例
查找距离巴黎(2.34,48.86)1000公里内的城市:
FT.SEARCH cities "@coords:[2.34 48.86 1000 km]"
向量类型(VECTOR)
向量类型用于存储高维向量数据,通常由机器学习模型生成,支持相似度搜索。
关键特性
- 支持多种相似度算法
- 可处理文本、图像等非结构化数据
- 适用于推荐系统、内容相似度分析等场景
创建语法
FT.CREATE ... SCHEMA ... 字段名 VECTOR 算法 参数数量 [参数键值对...]
算法选项
- FLAT:暴力搜索算法,精度高但性能较低
- HNSW:分层导航小世界算法,平衡精度与性能
参数说明
TYPE
:向量元素类型(如FLOAT32)DIM
:向量维度DISTANCE_METRIC
:距离度量方式(如L2、COSINE等)
标签类型(TAG)
标签类型用于存储分类信息,适合低基数的离散值集合。
特点分析
- 不进行分词处理
- 支持自定义分隔符
- 默认大小写不敏感(可配置)
创建语法
FT.CREATE ... SCHEMA ... 字段名 TAG [SEPARATOR 分隔符] [CASESENSITIVE]
查询示例
查找带有"blue"标签的商品:
FT.SEARCH products "@tags:{blue}"
文本类型(TEXT)
文本类型是全文搜索的核心,支持丰富的文本处理功能。
核心功能
- 自动小写转换
- 分词处理
- 支持词干提取
- 可配置权重
创建语法
FT.CREATE ... SCHEMA ... 字段名 TEXT [WEIGHT 权重] [NOSTEM] [PHONETIC 匹配器] [SORTABLE] [NOINDEX] [WITHSUFFIXTRIE]
高级选项
-
PHONETIC:支持语音匹配(如双变音算法)
- dm:en(英语)
- dm:fr(法语)
- dm:pt(葡萄牙语)
- dm:es(西班牙语)
-
WITHSUFFIXTRIE:启用后缀树索引,优化模糊查询性能
查询示例
- 在所有文本字段中搜索"wizard":
FT.SEARCH books "wizard"
- 仅在title字段中搜索"dogs":
FT.SEARCH books "@title:dogs"
最佳实践建议
- 索引策略:对频繁查询的字段建立索引,不常用的字段可设为NOINDEX
- 性能权衡:向量搜索时,根据精度需求选择FLAT或HNSW算法
- 标签设计:合理选择标签分隔符,避免与内容冲突
- 文本处理:对不需要分词的文本(如URL)使用NOSTEM选项
- 地理查询:根据业务需求选择合适的距离单位(km/m)
通过合理运用这些字段类型和选项,开发者可以构建出高效、精准的搜索系统,满足各种复杂的业务需求。
RediSearch 项目地址: https://gitcode.com/gh_mirrors/red/RediSearch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考