Redis FT.SPELLCHECK 怎样排除业务专有词典
先用 FT.DICTADD 建立业务专有词字典,再在纠错请求后增加 TERMS EXCLUDE 字典名。如果业务目标是让查询中的品牌名、内部术语免于拼写纠错,这个写法比把它们强行加入搜索文档更直接。
需要注意“排除”作用在哪里:本文结合官方仓库当前实现讲解——查询词命中排除字典时,不为这个词返回纠错建议。不要把它当成一个必然从所有建议结果中删去禁词的通用黑名单。
Redis 官方命令地址:https://redis.io/docs/latest/commands/ft.spellcheck/
# 创建或补充业务专有词字典;词项使用单独参数传递。 redis-cli FT.DICTADD demo:spell:protected lumora navexa # demo:catalog是已经存在的搜索索引;专有词按查询级排除规则处理。 redis-cli FT.SPELLCHECK demo:catalog "lumora camrea" TERMS EXCLUDE demo:spell:protected
lumora、navexa是本文虚构的业务词,camrea是用于说明纠错的拼写输入。实际候选取决于索引内容,不能因为命令写了camrea就保证一定返回camera。本文所有命令均为写作示例,未在数据库执行。
为什么不能只靠普通纠错保护专有词
搜索框里的一个词不在索引中,可能是拼写错误,也可能是刚上线的产品代号。用户输入的专有词如果总被提示改成别的普通词,问题往往在纠错范围,而不是编辑距离不够大。
有些系统会把专有词塞进文档来“消除报错”,结果让索引承担了不属于文档的数据职责。更清晰的做法是分别管理索引词汇与业务保护词,并在需要保护的纠错请求中显式引用字典。这是规则配置的选择,不代表新增了搜索召回数据。

新规则是查询级引用,不是全局永久开关
FT.DICTADD负责管理字典内容,FT.SPELLCHECK中的TERMS负责选择本次如何使用它。创建一个字典,不代表所有索引和所有后续请求都会自动采用它;应用构造请求时必须带上所需参数。
官方命令参考对TERMS作了包含与排除的简要说明;官方概念页把排除词描述为不返回的拼写替代项。但官方仓库的SpellCheck_ReplyTermSuggestions实现先用查询词检查excludeDict,命中就直接不生成该词的建议。两处措辞不宜混为一个更强的保证:本文示例采用后者明确可见的“输入词免纠错”行为,具体部署应以对应版本为准。
因此,若目标是屏蔽建议中某些不允许显示的词,应用仍需要独立的候选过滤策略,不能仅凭EXCLUDE这个名字就认定该需求已经覆盖。不要把业务展示规则与搜索纠错参数混在同一份隐含约定里。
INCLUDE与EXCLUDE怎样选择
| 需求 | 选择 | 作用说明 |
|---|---|---|
| 专有输入词不应被提示改写 | TERMS EXCLUDE | 按当前实现,对命中的查询词跳过建议 |
| 希望自定义词参与建议来源 | TERMS INCLUDE | 把字典作为候选来源补充 |
| 从字典删除一个维护错的词 | FT.DICTDEL | 修改字典内容,不是查询参数 |
| 控制搜索结果能否出现某词 | 另行设计搜索规则 | 拼写纠错配置不等于结果过滤 |
把同一个业务词同时放进保护字典和候选字典并不是一种通用的“更强保护”。应先写明产品规则:保护用户原词,还是允许把别的拼写建议成该词,再决定请求使用哪份字典。命令支持多组TERMS,但配置越多并不自动意味着语义越清晰。
# 候选词字典用于补充建议来源,和输入保护词字典分开命名。 redis-cli FT.DICTADD demo:spell:candidates camera camcorder # 同一次请求可以引用不同用途的字典;不把INCLUDE当作免纠错。 redis-cli FT.SPELLCHECK demo:catalog "lumora camrea" DISTANCE 1 TERMS EXCLUDE demo:spell:protected TERMS INCLUDE demo:spell:candidates
DISTANCE控制建议的最大编辑距离,默认值为1,官方命令参考给出的最大值为4。它解决相近拼写的候选范围,不能替代词项是否属于业务专有词的判断。
独立演示:让索引与保护词各司其职
以下使用仅供演示的新索引和文档前缀。在支持Redis Search的隔离环境中,确认名称未占用再逐条使用;创建失败应停止,不要继续写入未知的已有索引。
# 创建演示索引,只收集独立前缀下的HASH文档。 redis-cli FT.CREATE demo:spell:catalog ON HASH PREFIX 1 demo:spell:doc: SCHEMA title TEXT # 普通候选词来自演示文档,专有词则维护在字典中。 redis-cli HSET demo:spell:doc:1 title "camera camcorder" redis-cli FT.DICTADD demo:spell:protected lumora navexa # 先说明无排除参数的请求形式,再给出业务保护请求。 redis-cli FT.SPELLCHECK demo:spell:catalog "lumora camrea" redis-cli FT.SPELLCHECK demo:spell:catalog "lumora camrea" TERMS EXCLUDE demo:spell:protected
这个对比的目标是观察输入lumora是否被排除出需要建议的词项,而不是预设整份返回数组逐字相同。索引准备程度、词项处理方式和实际内容会影响建议,本文没有编造响应分数或命中数量。
排除规则以实际解析到的词项为对象。多词品牌、连字符、大小写与语言分词都可能让用户看到的字符串和参与纠错的词项不同;不能把一整句原始输入放进字典,就假定所有组成部分都会受到同样保护。

接入时保留明确的边界
把字典名、词项列表及请求选项放在受控配置中,调用客户端时按独立参数传递。不要把用户输入直接拼接成shell命令,查询里的空格也不能让命令行替你决定参数边界。多业务共用Redis时,可以在字典命名中体现业务范围,避免一份通用保护表改变所有场景的行为。
建议返回给用户以后,也应由产品决定是展示“你是否想搜”,还是等待用户确认。FT.SPELLCHECK产生建议,并不会替应用自动改写和执行原搜索请求。没有建议也不等于输入一定拼写正确,更不等于搜索一定有结果。
FT.DICTADD会把专有词写入搜索索引吗?
不会,它维护自定义字典。字典内容与索引文档是不同对象。
TERMS EXCLUDE会删除业务词或文档吗?
不会,这里的参数用于本次拼写纠错请求,不执行字典删除或文档删除。
为什么设置后某个多词品牌仍有建议?
先区分原始短语与解析词项,再确认应用发出的请求确实引用了正确字典。也要明确需求是保护输入,还是过滤返回候选,两者不可混用。
依据:FT.SPELLCHECK参考、FT.DICTADD、纠错概念说明与官方纠错实现。本文借用变更解释的组织方式,并未声称这是某个刚发布的提案或新功能。
Redis TS.CREATERULE 怎样对齐聚合时间桶
- 上一篇
- Redis TS.CREATERULE 怎样对齐聚合时间桶
- 下一篇
- Redis FT.DICTDUMP 怎样读取自定义词典的全部词条
-
- 数据库 · Redis | 59分钟前 | Redis · 缓存设计 · redis BYSCORE ZRANGESTORE 有序集 分数区间
- Redis ZRANGESTORE 怎样把分数区间结果写入新键
- 226浏览 收藏
-
- 数据库 · Redis | 1小时前 | Redis ·
- Redis FT.SYNDUMP 怎样查看词条所属的同义词组
- 418浏览 收藏
-
- 数据库 · Redis | 1小时前 | Redis · redis RediSearch FT.SYNUPDATE SKIPINITIALSCAN 同义词组
- Redis FT.SYNUPDATE 的 SKIPINITIALSCAN 怎样影响旧文档
- 243浏览 收藏
-
- 数据库 · Redis | 1小时前 |
- Redis FT.DICTDUMP 怎样读取自定义词典的全部词条
- 256浏览 收藏
-
- 数据库 · Redis | 1小时前 | Redis · redis RedisTimeSeries TS.CREATERULE alignTimestamp 聚合时间桶
- Redis TS.CREATERULE 怎样对齐聚合时间桶
- 378浏览 收藏
-
- 数据库 · Redis | 1小时前 |
- Redis TS.ALTER 修改 LABELS 为什么需要提供完整标签集
- 292浏览 收藏
-
- 数据库 · Redis | 16小时前 | Redis · lua ·
- Redis Functions 怎样加载可重复调用的服务端函数
- 325浏览 收藏
-
- 数据库 · Redis | 16小时前 |
- Redis SETRANGE 超出原长度为什么会补零字节
- 397浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 775次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 771次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 856次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 821次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 652次使用
-
- Go与Redis实现分布式互斥锁和红锁
- 2022-12-22 117浏览
-
- Go+Redis实现延迟队列实操
- 2023-02-23 426浏览
-
- 一文搞懂Go语言操作Redis的方法
- 2023-01-07 171浏览
-
- Golang分布式应用之Redis示例详解
- 2023-01-07 113浏览
-
- Go Redis客户端使用的两种对比
- 2022-12-30 195浏览

