RedisSearch字段类型与选项详解

RedisSearch字段类型与选项详解

RediSearch 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 算法 参数数量 [参数键值对...]

算法选项

  1. FLAT:暴力搜索算法,精度高但性能较低
  2. 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]

高级选项

  1. PHONETIC:支持语音匹配(如双变音算法)

    • dm:en(英语)
    • dm:fr(法语)
    • dm:pt(葡萄牙语)
    • dm:es(西班牙语)
  2. WITHSUFFIXTRIE:启用后缀树索引,优化模糊查询性能

查询示例

  1. 在所有文本字段中搜索"wizard":
FT.SEARCH books "wizard"
  1. 仅在title字段中搜索"dogs":
FT.SEARCH books "@title:dogs"

最佳实践建议

  1. 索引策略:对频繁查询的字段建立索引,不常用的字段可设为NOINDEX
  2. 性能权衡:向量搜索时,根据精度需求选择FLAT或HNSW算法
  3. 标签设计:合理选择标签分隔符,避免与内容冲突
  4. 文本处理:对不需要分词的文本(如URL)使用NOSTEM选项
  5. 地理查询:根据业务需求选择合适的距离单位(km/m)

通过合理运用这些字段类型和选项,开发者可以构建出高效、精准的搜索系统,满足各种复杂的业务需求。

RediSearch RediSearch 项目地址: https://gitcode.com/gh_mirrors/red/RediSearch

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐妮琪Plains

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值