RediSearch `FT.CREATE` 完全参数指南 HASH/JSON 双写实战

1、索引与 Schema 速概

  • 索引 (index) —— 倒排、前缀、向量、Geo … 元数据集合
  • Schema —— 索引蓝图:定义字段、类型、权重、排序及存储策略
  • FT.CREATE —— 创建索引命令,分「索引级参数」和「字段级参数」两层

2 、FT.CREATE 语法模板

FT.CREATE <index>ON HASH|JSONPREFIX <n> <pfx1> [pfx2 …][FILTER '<expr>'][其他索引级选项 …]
SCHEMA<field> [AS <alias>] <type> [字段级选项 …]...

官方命令文档详见 Redis Docs ([redis.io][1])

3、索引级参数总览

参数功用典型用法
`ON HASHJSON`目标数据结构ON HASH
PREFIX n pfx…键前缀过滤PREFIX 2 prod: blog:
FILTER 'expr'条件索引FILTER '@status == "PUBLISHED"'
LANGUAGE lang / LANGUAGE_FIELD fld默认/动态语言LANGUAGE zh
SCORE n / SCORE_FIELD fld文档相关度基线SCORE 0.5
PAYLOAD_FIELD fld自定义二进制 payloadA/B Rank 用
TEMPORARY secN 秒后自动删除临时分析索引
SKIPINITIALSCAN跳过历史数据热流量场景
MAXTEXTFIELDS支持 > 32 TEXT巨型 JSON
内存优化族
`NOOFFSETS
NOHLNOFIELDSNOFREQS`关闭偏移/高亮/字段位图/词频只做过滤
`STOPWORDS cnt …0`自定义/禁用停用词STOPWORDS 0

4、字段类型

类型用途 & 特性
TEXT倒排全文检索;支持权重/词干/语音匹配
TAG离散标签;SEPARATOR 自定义分隔符
NUMERIC范围过滤、排序
GEO圆形半径查询
VECTOR向量 KNN / Range(≥ 2.4,需 DIALECT 2+)
GEOSHAPE多边形 & 点 WKT 查询(2.8 新增)([redis.io][2])

5、字段级选项

选项适用说明
WEIGHT wTEXT相关度乘子
SORTABLE [UNF]TEXT TAG NUMERIC GEO低延时排序;UNF 保留大小写 ([redis.io][1])
NOSTEMTEXT关词干化
PHONETIC dm:xxTEXT英/法/葡/西语发音
SEPARATOR ';'TAG自定义分隔符
CASESENSITIVETAG区分大小写
WITHSUFFIXTRIETEXT TAG高效中/后缀、通配符
NOINDEX任意仅存储/排序不倒排
INDEXEMPTY / INDEXMISSING任意索引空值/缺失值(≥ 2.10)

6、版本演进关键点

版本新能力
2.4向量 KNN 查询引入
2.6 / DIALECT 3JSON 多值字段返回结构、向量 Range 可多次
2.8GEOSHAPE 字段 + WITHIN/CONTAINS 多边形检索 ([redis.io][2])

7、典型 Schema 范例

7.1 带权重、排序与标签
FT.CREATE blog-idx ON HASH PREFIX 1 blog:post:
SCHEMAtitle        TEXT    WEIGHT 5.0content      TEXTauthor       TAGcreated_date NUMERIC SORTABLEviews        NUMERIC
7.2 自定义分隔符 TAG
FT.CREATE books-idx ON HASH PREFIX 1 book:details
SCHEMAtitle       TEXTcategories  TAG SEPARATOR ";"
7.3 一字段两种索引
FT.CREATE multi-idx ON HASH PREFIX 1 inventory:
SCHEMAsku AS sku_text TEXTsku AS sku_tag  TAG SORTABLE
7.4 JSON + JSONPath
FT.CREATE prodjs-idx ON JSON
SCHEMA$.title       AS title       TEXT$.categories  AS categories  TAG$.emb_vector  AS vector      VECTOR FLAT 6 TYPE FLOAT32 DIM 384 DISTANCE_METRIC COSINE

8、Schema 设计最佳实践

  1. 按需建索引:无查询需求字段可 NOINDEX / 不纳入 Schema
  2. 权重分级:标题、关键词拉高 WEIGHT,正文保持默认 1
  3. SORTABLE 谨慎:仅业务排序字段添加,否则内存倍增
  4. TAG 代替 TEXT 精确过滤:城市/状态/ID 等离散值
  5. FILTER 精准控制:索引前裁剪垃圾数据,减少写放大
  6. 统一前缀PREFIX 限定业务 Key,避免误索引其他模块

9、Hash + JSON 双写部署方案

场景:电商商品——Hash 做高速计数/库存;JSON 做复杂检索/推荐。

在这里插入图片描述

9.1 索引策略

方案描述适用
双索引(推荐)idx_hash ON HASH + idx_json ON JSON;用 FT.ALIASADD 做读写别名读写职责分离,Schema 灵活
JSON 主索引 + Hash 计数镜像JSON 索引所有检索字段;Lua/Streams 异步写 Hash 计数检索强需求,计数可弱一致
反向镜像(少见)以 Hash 为主,定时刷新 JSON 影子仅历史分析场景

9.2 代码示例(Go-redis)

pipe := rdb.TxPipeline()
// Hash: 秒级计数
pipe.HSet(ctx, "prod:1001", "price", 199, "stock", 8)
// JSON: 搜索主体
pipe.Do(ctx, "JSON.SET", "prodjs:1001", "$",`{"title":"Alpha Phone","desc":"6.7\" AMOLED",`+`"attrs":{"ram":8,"rom":256},"vector":`+string(vecBlob)+`}`)_, err := pipe.Exec(ctx)

搜索 Top-10 最近邻 + 价格过滤:

FT.SEARCH idx_json \"@price:[100 300]=>[KNN 10 @vector $qvec]" \PARAMS 2 qvec $queryVector DIALECT 3

9.3 一致性 & 性能要点

  1. 事务 or 幂等重试:TxPipeline + 重试
  2. 内存评估:Hash + JSON 两份数据;NOFIELDS/NOOFFSETS 减负
  3. 可观测性FT.INFO 监控 sortable_values_size_mb 等指标 ([redis.io][3])
  4. 索引热切换:新建索引 → FT.ALIASADD newFT.ALIASUPDATE prod_read 零停机
  5. Active-Active:JSON 已实现 CRDT;Hash 需应用幂等逻辑防冲突

10 | 常见坑与调优

症状排查 & 解决
内存暴涨检查 SORTABLE / 长文本 TEXT;用 FT.INFO 查看各 size_mb
全表扫描慢查询含大量 *foo*;加 WITHSUFFIXTRIE、限制 MAXEXPANSIONS
负查询 CPU 高纯负 -term 小命中 → 等同遍历全库;改为正向查询 + 额外条件
schema 变更影响线上使用新索引 + ALIAS 逐步切流;或 FT.ALTER 限制改动维度
Prefix 错误忘记带冒号导致全库 Key 入索引

11、总结

  • Schema 决定索引成败:理解每个字段类型与参数含义至关重要
  • 双写不是洪水猛兽:得当的事务、事件流 + RediSearch 实时索引即可平滑运行
  • 主动监控 & 热切换:用 FT.INFOFT.ALIAS* 工具化运维,才能保证线上稳定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88120.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT学习教程(三十七)

系统繁忙时的响应&#xff08;Staying Responsive During Intensive Processing&#xff09; 当我们调用QApplication::exec()时&#xff0c;Qt 就开始了事件循环。启动时&#xff0c;Qt 发出显示和绘制事件&#xff0c;把控件显示出来。然后&#xff0c;事件循环就开始了&…

hot100 -- 17.技巧

1.多数元素 问题&#xff1a; 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 方法1&#xff1a; 哈希表 实时判断&#xff…

算法第39天| 打家劫舍 1、2、3

198. 打家劫舍 题目 思路与解法 class Solution { public:int rob(vector<int>& nums) {// dp数组含义&#xff1a;// 考虑下标i&#xff08;包括i&#xff09;以内的房屋&#xff0c;最多可以偷窃的金额为dp[i]if (nums.size() 0) return 0;if (nums.size() 1)…

车载CAN总线数据采集与故障诊断装置设计与实现

车载CAN总线数据采集与故障诊断装置设计与实现 链接:1.6W字 [下载]摘要1.1 研究背景1.2 研究意义(1)技术提升:推动CAN总线诊断的智能化与实时性(2)经济价值:降低诊断成本与维修时间(3)安全与标准化:促进车联网数据安全体系建设社会效益1.3 国内外研究现状1.3.1 国外研…

布瑞琳BRANEW:高端洗护领航者,铸就品质生活新典范

近日,布瑞琳BRANEW,这一中国高端洗护行业的领军品牌,再次凭借其卓越的服务品质、创新的经营模式以及对行业标准的深度推动,成为市场瞩目的焦点。作为北京2022年冬奥会和残奥会的商业服务保障单位,布瑞琳不仅展现了其无与伦比的服务能力,更在国际舞台上彰显了品牌的非凡影响力。…

AWS服务器扩充硬盘

1、在控制台上将需要扩充的硬盘增加空间 将硬盘大小由原来的50G升级到200G 2、登录所挂载的服务器 1&#xff09;查看硬盘分区情况 adminip-172-31-121-13:~$ sudo lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS nvme0n1 259:0 0 200G 0 disk ├─nv…

嵌入式自学第四十二天

PWM:脉冲宽度调制&#xff0c;调节电压为方波。关键参数&#xff1a;占空比、周期。 UART&#xff1a;通用异步收发器。 参与通信的设备&#xff1a;主机host 通信的本质&#xff1a;数据的传递。 通信方式&#xff1a; 单工&#xff1a;只能单向传递 半双工&#xff1a;双向…

人工智能如何重塑教育体系:个性化学习的新时代

&#x1f4dd;个人主页&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、引言&#xff1a;教育的“智能革命”正在发生 教育作为人类社会发展的基石&#xff0c;始终紧随技术进步不断演化。从印刷术带来知识…

【云原生】基础篇

​一、云原生 1.1 本质与核心技术体系​ 云原生&#xff08;Cloud Native&#xff09;是以容器化、微服务、声明式API和动态编排为核心的架构范式&#xff0c;旨在最大化利用云的弹性、可观测性和自动化能力。其技术栈分层如下&#xff1a; ​1.2、云原生核心技术栈​ ​层级…

实时反欺诈:基于 Spring Boot 与 Flink 构建信用卡风控系统

在金融科技飞速发展的今天&#xff0c;信用卡欺诈手段日益高明和快速。传统的基于批处理的事后分析模式已难以应对实时性要求极高的欺诈场景。本文将详细介绍如何利用 Spring Boot 和 Apache Flink 这对强大的组合&#xff0c;构建一个高性能、可扩展的实时信用卡反欺诈系统。 …

通过apache共享文件

有时候&#xff0c;vmware虚拟机的vmware tools总是安装失败&#xff0c;这样就不能在虚拟机和主机之间共享文件。此时可以利用apache通过文件上传和下载共享文件。 通过下面的php文件&#xff0c;虚拟机作为客户端访问此php&#xff0c;可以在虚拟机和主机之间共享文件。当然…

Maven生命周期,测试

测试 Junit入门 单元测试 单元测试&#xff1a;就是针对最小的功能单元(方法)&#xff0c;编写测试代码对其正确性进行测试。 JUnit&#xff1a;最流行的Java测试框架之一&#xff0c;提供了一些功能&#xff0c;方便程序进行单元测试&#xff08;第三方公司提供&#xff09…

H5调试工具vconsole和Eruda对比

VConsole与Eruda对比分析 VConsole和Eruda是两款主流的移动端JavaScript调试工具&#xff0c;它们在功能定位、使用场景和技术实现上有诸多差异。以下从多个维度进行对比&#xff0c;帮助你选择更适合的工具&#xff1a; 一、核心功能对比 功能维度VConsoleEruda基础日志输出…

Java经典编程题

题目 1&#xff1a;斐波那契数列 题目要求&#xff1a;编写一个方法&#xff0c;输入正整数n&#xff0c;输出斐波那契数列的第n项。斐波那契数列的定义是&#xff1a;F(0)0&#xff0c;F(1)1, 当n > 1时&#xff0c;F(n)F(n - 1)F(n - 2)。 答案&#xff1a; public cla…

BUG调试案例五十:“低级”设计BUG案例篇(持续更新中.........)

引言 回头看这些年硬件路,总有一些“低级Bug”一次次地在给我上课。它们不是复杂的架构设计,不是玄妙的信号完整性问题,而是最基础、最应该避免、却又最容易忽略的小细节。 每一次Bug的背后,都是教训,有的甚至让整个项目差点“翻车”。写下这篇文章记录那些“看似简单实…

DeepSeek中的提示库及其用法示例

《DEEPSEEK原生应用与智能体开发实践 图书》【摘要 书评 试读】- 京东图书 为了深入探索DeepSeek提示词样例的丰富内涵&#xff0c;充分挖掘其背后潜藏的无限可能&#xff0c;同时致力于为用户打造更为卓越、便捷且高效的使用体验&#xff0c;DeepSeek官网的API文档匠心独运地…

Node.js特训专栏-实战进阶:7.Express模板引擎选型与使用

&#x1f525; 欢迎来到 Node.js 实战专栏&#xff01;在这里&#xff0c;每一行代码都是解锁高性能应用的钥匙&#xff0c;让我们一起开启 Node.js 的奇妙开发之旅&#xff01; Node.js 特训专栏主页 专栏内容规划详情 Express模板引擎选型与使用全解析&#xff1a;打造动态We…

uniapp评价组件

组件目录 components/Evaluation.vue <template><view class"evaluation-container"><!-- 综合评价 --><view class"evaluation-item" tap"parentTap"><text class"label label-1">综合评价</text&…

SQL Server2022版详细安装教程(Windows)

一&#xff0c;下载SQL Server 可以浏览器自己搜索一下 2、安装 安装前需要先将防火墙和带杀毒软件的先退出关闭掉&#xff08;防止安装不成功&#xff09; 2.1、选择自定义安装 2.2、更改位置进行安装 2.3、等待安装 3、进行安装配置 当安装好后会弹出一个这样的页面 3.1、…

【图像】ubuntu中图像处理

一、环境设置 1、查看视频源 ls /dev/video* 2、查看摄像头的分辨率等参数 v4l2-ctl --device/dev/video0 --list-formats-ext 若未安装v4l-utils sudo apt install v4l-utils 3、测试摄像头能否正常工作 cheese