当前位置: 首页 > backend >正文

RediSearch 字段类型与配置选项

1. 数值字段(NUMERIC)

  • 用途:存储整数或浮点数,可进行范围查询与排序。

  • 选项

    • SORTABLE:允许用 SORTBY 排序
    • NOINDEX:不参与索引,仅供返回

定义语法

FT.CREATE idx ON HASH PREFIX 1 prod:
SCHEMAprice   NUMERIC [SORTABLE] [NOINDEX]

查询示例

# 查找 price 在 200 到 300 之间的文档
FT.SEARCH idx "@price:[200 300]"# 开区间
FT.SEARCH idx "@price:[(100 (200]"# 上下界省略表示 ±∞
FT.SEARCH idx "@price:[500 +inf]"

2. 地理坐标字段(GEO)

  • 用途:存储经纬度(lon,lat),支持半径范围检索。

  • 选项

    • SORTABLE:允许排序
    • NOINDEX:仅供返回,不参与检索

定义语法

FT.CREATE idx ON HASH PREFIX 1 city:
SCHEMAcoords  GEO [SORTABLE] [NOINDEX]

查询示例

# 查找距离 (2.34,48.86) 1000 公里内的城市
FT.SEARCH idx "@coords:[2.34 48.86 1000 km]"

更多地理形状(Geoshape)请见下节。

3. 地理形状字段(GEOSHAPE)

  • 用途:存储点、线、面等几何体,支持点在形状内、形状相交等高级空间查询。

  • 坐标类型

    • SPHERICAL(默认):地球球面坐标
    • FLAT:平面笛卡尔坐标
  • 选项

    • NOINDEX:仅供返回

定义语法

FT.CREATE idx ON HASH PREFIX 1 region:
SCHEMAarea   GEOSHAPE [FLAT|SPHERICAL] [NOINDEX]

查询示例

# 找出包含点 (2,2) 的几何体(需 DIALECT 2)
FT.SEARCH idx "(@area:[CONTAINS $pt])" PARAMS 2 pt "POINT (2 2)" RETURN 1 nameDIALECT 2

4. 向量字段(VECTOR)

  • 用途:存储机器学习生成的浮点向量,支持 KNN 相似度检索。

  • 算法

    • FLAT:暴力搜索
    • HNSW:小世界图
  • 必选属性

    • TYPE:数据类型,如 FLOAT32
    • DIM:向量维度
    • DISTANCE_METRICL2IP(内积)等
  • 可选属性(视算法而定):如 M, EF_CONSTRUCTION(HNSW)等

定义语法

FT.CREATE idx ON HASH PREFIX 1 vec:
SCHEMAembedding VECTOR FLAT 6TYPE FLOAT32 DIM 128 DISTANCE_METRIC L2
  • 这里 6 表示后面跟了 6 个属性:TYPEFLOAT32DIM128DISTANCE_METRICL2

5. 标签字段(TAG)

  • 用途:存储有限离散值,如类别、状态码等,按完整值匹配,无分词。

  • 选项

    • SEPARATOR <char>:自定义多值分隔符(默认 ,
    • CASESENSITIVE:大小写敏感(默认不敏感)
    • SORTABLE:支持排序
    • NOINDEX:不参与索引

定义语法

FT.CREATE idx ON HASH PREFIX 1 doc:
SCHEMAtags  TAG [SEPARATOR "|" ] [CASESENSITIVE] [SORTABLE]

查询示例

# 查找包含标签 blue 的文档
FT.SEARCH idx "@tags:{blue}"

6. 文本字段(TEXT)

  • 用途:全文检索,分词、词干提取,支持权重与排序。

  • 选项

    • WEIGHT <float>:字段相关度权重(默认 1.0)
    • NOSTEM:关闭词干提取
    • PHONETIC <matcher>:启用双音素搜索(dm:en 等)
    • SORTABLE:支持排序
    • NOINDEX:不参与索引,仅供返回
    • WITHSUFFIXTRIE:为后缀/通配查询构建后缀树

定义语法

FT.CREATE idx ON HASH PREFIX 1 blog:
SCHEMAtitle     TEXT [WEIGHT 2.0] [SORTABLE]content   TEXT NOSTEMemail     TEXT PHONETIC dm:en

查询示例

# 任意文本字段中搜索 wizard
FT.SEARCH idx "wizard"# 仅在 title 搜索 dogs
FT.SEARCH idx "@title:dogs"

7. Unicode 注意事项

  • RediSearch 仅支持 BMP(U+0000–U+FFFF)字符;超出此范围的字符(如部分 Emoji)不能用于前缀/后缀/通配或模糊查询。
  • 示例:对 😀😁🙂 等字符的前缀查询无效。

八、最佳实践

  1. 字段选型:根据业务场景选择合适类型,避免全部用 TEXT 导致索引膨胀。
  2. 索引与存储分离:对只需返回但不检索的字段使用 NOINDEX,节省内存。
  3. 排序字段:仅对必要字段加 SORTABLE,过多 sortable 将增加内存开销。
  4. 权重调整:对标题或关键字段使用 WEIGHT 提升相关度。
  5. 合理分隔:TAG 多值字段尽量指定 SEPARATOR,避免与默认逗号冲突。

通过以上示例与说明,你已掌握 RediSearch 的所有字段类型及其关键配置选项。结合业务需求和数据特点,灵活调整 Schema,既可实现强大的搜索功能,又能最大限度地优化内存与查询性能。

http://www.xdnf.cn/news/14820.html

相关文章:

  • 当工业设备开始“独立思考“——AI边缘计算网关的泛在化应用
  • 分布式事务理论基础及常见解决方案
  • Linux基本命令篇 —— alias命令
  • Vue 安装使用教程
  • 【格与代数系统】格与哈斯图
  • 【1.6 漫画数据库设计实战 - 从零开始设计高性能数据库】
  • Docker进阶命令与参数——AI教你学Docker
  • 【Python基础】11 Python深度学习生态系统全景解析:从基础框架到专业应用的技术深度剖析(超长版,附多个代码及结果)
  • [Python 基础课程]字符串
  • 主流零信任安全产品深度介绍
  • ESP官网的使用手册网址
  • 【Python】断言(assert)
  • 学习经验分享【41】YOLOv13:基于超图增强自适应视觉感知的实时目标检测
  • 清理 Docker 缓存占用
  • 振荡电路Multisim电路仿真实验汇总——硬件工程师笔记
  • 【CSS样式】按钮样式
  • CloudBase AI ToolKit实战:从0到1开发一个智能医疗网站
  • HarmonyOS应用开发高级认证知识点梳理 (一) 布局与样式
  • browser-tools-mcp + excel-mcp-server + cursor 实现读取网页信息自动写入Excel
  • Mybatis使用lte报错使用case when报错
  • AI公司在做什么 - 一文穿透大模型(从底层到应用、从硬件到软件、从原理到实战)
  • 打造无障碍Ubuntu远程工作环境:XRDP、VNC与向日葵等三大远程连接方案
  • CppCon 2018 学习:EMULATING THE NINTENDO 3DS
  • 【C#】如果有一个数值如 168.0000100,如何去除末尾的无效零,只显示有效的小数位数,让DeepSeek给我们解答
  • 量化选股策略 聚宽
  • 基于Python的GIS-RS多源数据处理(TIF/SHP/NC/...)【20250630】
  • 华为云Flexus+DeepSeek征文 | 对接华为云ModelArts Studio大模型:AI赋能投资理财分析与决策
  • js代码03
  • 每天一个前端小知识 Day 17 - 微前端架构实战与 Module Federation
  • 基于Flask技术的民宿管理系统的设计与实现