【高速缓存】RedisVL 高级查询(全文搜索、混合搜索和 多向量搜索)
RedisVL 不仅支持基本的向量相似性搜索还提供了多种高级查询类型帮助您构建更智能、更精准的检索应用。本指南将深入讲解三种核心高级查询——TextQuery全文搜索、HybridQuery混合搜索和MultiVectorQuery多向量搜索。 前提条件在开始之前请确保您已具备以下环境安装 RedisVLpip install redisvl一个运行中的 Redis 实例推荐 Redis 8 或 Redis Cloud如需使用HybridQuery需要 Redis 8.4.0 且redis-py 7.1.0 该要使用TextQuery进行全文搜索并灵活调整评分算法利用HybridQuery和AggregateHybridQuery将文本搜索与向量搜索相结合获得“语义 关键词”的双重优势通过MultiVectorQuery跨多个向量字段如文本向量、图像向量进行联合检索配置索引级或查询级停用词优化文本搜索效果 数据准备与索引定义首先准备一组商品数据包含文本描述、类别、价格、评分以及两种向量文本嵌入和图像嵌入。这些数据将贯穿全文示例。importnumpyasnpfromjupyterutilsimportresult_print data[{product_id:prod_1,brief_description:comfortable running shoes for athletes,full_description:Engineered with a dual-layer EVA foam midsole...,category:footwear,price:89.99,rating:4.5,text_embedding:np.array([0.1,0.2,0.1],dtypenp.float32).tobytes(),image_embedding:np.array([0.8,0.1],dtypenp.float32).tobytes(),},# ... 更多商品省略具体内容与原文一致]定义索引模式Schema索引模式决定了 Redis 如何存储和索引字段。本例中我们定义了字段名类型用途product_id,categoryTag精确过滤brief_description,full_descriptionText全文搜索price,ratingNumeric数值范围过滤text_embedding(3维)Vector文本语义向量image_embedding(2维)Vector图像语义向量schema{index:{name:advanced_queries,prefix:products,storage_type:hash,},fields:[{name:product_id,type:tag},{name:category,type:tag},{name:brief_description,type:text},{name:full_description,type:text},{name:price,type:numeric},{name:rating,type:numeric},{name:text_embedding,type:vector,attrs:{dims:3,distance_metric:cosine,algorithm:flat,datatype:float32}},{name:image_embedding,type:vector,attrs:{dims:2,distance_metric:cosine,algorithm:flat,datatype:float32}}],}创建索引并加载数据fromredisvl.indeximportSearchIndex indexSearchIndex.from_dict(schema,redis_urlredis://localhost:6379)index.create(overwriteTrue)keysindex.load(data)print(f已加载{len(keys)}个产品)1️⃣ TextQuery全文搜索TextQuery是面向关键词的搜索工具支持多种相关性评分算法BM25、TF‑IDF并可结合过滤器、多字段权重及停用词优化。基本原理全文搜索的核心是倒排索引。Redis 将文本字段分词后构建索引查询时根据词项匹配情况计算文档与查询的相关性分数。评分算法直接影响排序效果BM25BM25STD一种基于概率检索模型的成熟算法考虑词频、文档长度等因素通常比 TF‑IDF 更精准。TF‑IDF经典算法计算简单适合快速原型。基本用法fromredisvl.queryimportTextQuery text_queryTextQuery(textrunning shoes,text_field_namebrief_description,return_fields[product_id,brief_description,category,price],num_results5)resultsindex.query(text_query)result_print(results)输出显示匹配到的商品并按相关性分数降序排列。评分算法对比您可以显式指定text_scorer参数# BM25 标准评分默认bm25_queryTextQuery(...,text_scorerBM25STD)# TF‑IDF 评分tfidf_queryTextQuery(...,text_scorerTFIDF)建议对于一般应用BM25 通常表现更佳若需快速实现或简单场景TF‑IDF 也可胜任。结合过滤器使用filter_expression可以缩小搜索范围例如只搜索某类别或价格区间的商品fromredisvl.query.filterimportTag,Num# 只查找 footwear 类别中的 shoesfilteredTextQuery(textshoes,text_field_namebrief_description,filter_expressionTag(category)footwear,...)# 价格小于 100price_filteredTextQuery(textcomfortable,filter_expressionNum(price)100,...)多字段加权搜索有时不同字段的重要性不同例如brief_description比full_description更能代表商品核心信息。您可以给每个字段分配权重weighted_queryTextQuery(textshoes,text_field_name{brief_description:1.0,full_description:0.5},...)这样命中brief_description的文档会比仅命中full_description的获得更高分数。停用词Stopwords详解停用词是指那些出现频率极高但对语义贡献很小的词如 “the”, “for”。Redis 允许在查询级别和索引级别配置停用词两者作用机制不同配置层级作用时机影响范围查询级TextQuery.stopwords查询时客户端过滤查询词仅影响当前查询索引级Index.stopwords索引创建时服务器决定哪些词被收录影响整个索引所有查询查询级停用词示例# 使用英语默认停用词过滤 the, for 等query_englishTextQuery(textthe best shoes for running,stopwordsenglish,...)# 自定义停用词列表只过滤 for, withquery_customTextQuery(textprofessional equipment for athletes,stopwords[for,with],...)# 完全不禁用停用词保留所有词query_noneTextQuery(textthe best shoes for running,stopwordsNone,...)索引级停用词在创建索引时可通过index.stopwords字段控制哪些词不被索引。默认 Redis 会使用内置停用词列表。若要禁用所有停用词即索引所有词可设置为空列表[]即STOPWORDS 0。这在搜索专有名词如 “Bank of America”时非常有用因为 “of” 不会被过滤掉。stopwords_schema{index:{name:company_index,stopwords:[]# 禁用所有停用词},fields:[...]}⚠️注意索引级停用词在索引创建时生效且修改后需重建索引。查询级停用词则更灵活可按需调整。2️⃣ HybridQuery混合搜索混合搜索将全文检索与向量语义检索相结合既利用关键词精准匹配又借助向量捕获深层语义显著提升检索质量。Redis 从 8.4.0 开始原生支持FT.HYBRID命令RedisVL 提供了HybridQuery类新和AggregateHybridQuery旧两种实现。版本说明HybridQuery需要 Redis 8.4.0 且 redis-py 7.1.0支持更丰富的功能如 RRF、运行时参数。AggregateHybridQuery兼容旧版 Redis基于FT.AGGREGATE实现功能略少不支持 RRF且不支持运行时参数。以下示例默认使用HybridQuery若环境不满足则会降级使用AggregateHybridQuery。混合搜索的工作原理混合搜索并行执行文本查询和向量查询分别得到两个分数文本相关度和向量相似度然后通过组合方法将二者融合为一个最终得分。下图展示了这一流程文本分数向量相似度最终得分用户查询文本检索向量检索得分融合排序结果组合方法RedisVL 支持两种融合策略线性组合LINEARfinal_score α * text_score (1 - α) * vector_score其中α控制文本与向量的权重。默认α 0.3即向量占 70%。倒数排名融合RRF不直接使用分数而是基于各自排名进行融合公式为RRF Σ 1/(k rank)。这种方法对排名靠前的文档给予更高权重能有效缓解分数尺度不一致的问题。基本用法fromredisvl.queryimportHybridQuery hybrid_queryHybridQuery(textrunning shoes,text_field_namebrief_description,vector[0.1,0.2,0.1],# 查询向量vector_field_nametext_embedding,return_fields[product_id,brief_description,category,price],num_results5,yield_text_score_astext_score,yield_vsim_score_asvector_similarity,combination_methodLINEAR,yield_combined_score_ashybrid_score,)resultsindex.query(hybrid_query)输出中会包含文本分数、向量相似度以及融合后的混合分数。调整 alpha 参数通过调整linear_alphaHybridQuery或alphaAggregateHybridQuery可以控制文本和向量的权重alpha1.0纯文本搜索alpha0.0纯向量搜索alpha0.1文本占 10%向量占 90%向量优先# 向量优先查询vector_heavyHybridQuery(...,linear_alpha0.1,combination_methodLINEAR)注意AggregateHybridQuery中的alpha含义相反——它表示向量权重所以alpha0.9表示向量占 90%文本占 10%。使用 RRF仅 HybridQueryrrf_queryHybridQuery(...,combination_methodRRF,rrf_window60,# 可选默认 60rrf_constant1,# 可选默认 1)混合搜索 过滤器与TextQuery类似您也可以添加过滤条件filtered_hybridHybridQuery(...,filter_expressionNum(price)100,)运行时参数仅 HybridQuery对于 HNSW 索引可以通过ef_runtime参数在查询时动态调整搜索范围以平衡精度与速度。HybridQuery支持此参数而AggregateHybridQuery不支持因为它使用FT.AGGREGATE。hybrid_with_runtimeHybridQuery(...,ef_runtime200,# 针对 HNSW 索引)3️⃣ MultiVectorQuery多向量搜索当您的数据包含多种模态的向量如文本向量、图像向量、音频向量时MultiVectorQuery允许您同时对这些向量字段进行检索并按权重综合排序。原理每个查询向量都带有一个权重最终得分为所有向量相似度的加权和combined_score w1 * sim1 w2 * sim2 ... wn * simn其中wi为第 i 个向量的权重simi为其与查询向量的相似度余弦距离转换为相似度1 - 距离。基本用法fromredisvl.queryimportMultiVectorQuery,Vector# 定义每个向量查询text_vectorVector(vector[0.1,0.2,0.1],field_nametext_embedding,dtypefloat32,weight0.7)image_vectorVector(vector[0.8,0.1],field_nameimage_embedding,dtypefloat32,weight0.3)multi_queryMultiVectorQuery(vectors[text_vector,image_vector],return_fields[product_id,brief_description],num_results5)resultsindex.query(multi_query)结果中会显示每个向量的单独得分和组合得分。调整权重您可以通过修改weight来突出某个模态的重要性例如更侧重图像相似性text_vec.weight0.2image_vec.weight0.8结合过滤器同样支持过滤filtered_multiMultiVectorQuery(...,filter_expressionTag(category)footwear,) 三种查询类型对比为了让您更直观地选择合适的方法下表对比了各自特点查询类型核心能力适用场景关键参数TextQuery纯关键词全文搜索精准匹配、传统搜索引擎文本评分器、多字段权重、停用词HybridQuery文本 向量融合兼顾精确与语义适用于大多数搜索场景组合方法LINEAR/RRF、alpha、运行时参数MultiVectorQuery多模态向量联合检索多模态搜索图文、音视频等向量权重、多向量组合下图为决策流程图帮助您快速定位是否是是否否是否开始需要关键词匹配是否需要语义理解TextQuery是否有多个向量字段MultiVectorQueryHybridQuery是否有多个向量字段纯向量搜索VectorQuery不在本指南 最佳实践TextQuery 适用场景当查询词明确、需要精确匹配时如产品型号、专有名词。若数据量不大且实时性要求高文本搜索性能优越。HybridQuery 推荐对于电商、内容推荐等混合场景混合搜索能同时捕获用户意图向量和关键词文本效果更好。建议先用默认 alpha0.3测试再根据业务调整。MultiVectorQuery 多模态利器如果您的数据有图像、音频等多种向量多向量查询可以让您统一打分排序避免分别检索再合并的繁琐。停用词策略如果您的数据包含常见的停用词且这些词具有业务含义如公司名称中的 “of”请在索引级别禁用停用词如果只是查询时想忽略某些词使用查询级停用词更灵活。版本兼容生产环境务必检查 Redis 和 redis-py 版本以决定使用HybridQuery还是AggregateHybridQuery。建议升级到 Redis 8.4 以享受完整功能。 清理资源示例结束后可以删除测试索引以释放资源index.delete(dropTrue)

相关新闻

UCD90124电源时序与健康监控:从原理到实战的避坑指南

UCD90124电源时序与健康监控:从原理到实战的避坑指南

1. 项目概述与核心价值在服务器主板、高端通信设备或者复杂的工业控制系统中,你可能会看到十几路甚至几十路不同的电源轨。CPU核心电压、内存电压、各种芯片的I/O电压、辅助电压……它们不是一通电就全部“啪”一下同时起来的。如果顺序错了,轻则系统无法…

2026/7/24 7:40:33 阅读更多 →
【高速缓存】Redis for AI 与搜索概述

【高速缓存】Redis for AI 与搜索概述

Redis 能够存储和索引向量嵌入(Embedding)以及关联的结构化元数据,支持语义搜索、实时检索和代理记忆,在任意规模下都能实现毫秒级延迟。本文将为您系统介绍 Redis 在 AI 和搜索领域的核心能力、服务组件、工作原理以及学习路径。…

2026/7/24 7:40:33 阅读更多 →
计算机毕业设计之基于SpringBoot的汽车租赁系统设计与实现

计算机毕业设计之基于SpringBoot的汽车租赁系统设计与实现

汽车租赁系统的开发与研究在当前共享经济和移动互联网快速发展的背景下显得尤为重要。随着城市化进程的加速和汽车行业的蓬勃发展,传统的汽车租赁管理方式已无法满足高效、便捷、安全的管理需求。因此,基于SpringBoot框架的汽车租赁系统应运而生。该系统…

2026/7/24 7:40:32 阅读更多 →

最新新闻

Hough变换在雷达航迹起始中的算法优化与实践

Hough变换在雷达航迹起始中的算法优化与实践

1. 航迹起始算法概述:从理论到实践在雷达信号处理和多目标跟踪领域,航迹起始(Track Initiation)是构建稳定跟踪系统的首要环节。想象一下空中交通管制场景——雷达屏幕上闪烁的无数光点中,哪些是真实目标?哪…

2026/7/24 7:47:35 阅读更多 →
LLM训练进阶:从SFT到RL的完整路径与优化策略

LLM训练进阶:从SFT到RL的完整路径与优化策略

1. 项目背景与核心价值微软与德克萨斯大学达拉斯分校(UT Dallas)的这项联合研究,首次系统性地揭示了大型语言模型(LLM)从监督微调(SFT)到强化学习(RL)的完整进阶路径。这…

2026/7/24 7:47:35 阅读更多 →
汉兰达双擎vs大唐:混动与新能源技术路线深度对比

汉兰达双擎vs大唐:混动与新能源技术路线深度对比

1. 先搞清楚这两台车到底在比什么汉兰达双擎和大唐的对比,表面上是两款车型的选择,实际上背后是两种技术路线和用车理念的差异。汉兰达双擎代表的是传统混动技术的成熟稳定,而大唐则代表了新能源技术的快速迭代。如果你在纠结这两台车&#x…

2026/7/24 7:47:35 阅读更多 →
PPO算法实战:从训练到部署的深度强化学习指南

PPO算法实战:从训练到部署的深度强化学习指南

1. PPO算法训练与测试全流程解析作为深度强化学习领域最主流的算法之一,近端策略优化(PPO)在游戏AI、机器人控制、金融交易等场景展现出卓越性能。但很多开发者在实际落地时,常因对完整流程理解不透彻而陷入"算法效果不如论文…

2026/7/24 7:47:35 阅读更多 →
文案优化核心技术:从SEO到转化率提升的实战策略

文案优化核心技术:从SEO到转化率提升的实战策略

1. 文案优化行业现状与核心需求在当今内容为王的时代,优质文案已成为企业获客转化的关键武器。根据Content Marketing Institute的调研数据显示,超过78%的B2B企业将内容创作列为最重要的营销策略。但真正的问题在于:如何让文案从"能用&q…

2026/7/24 7:47:35 阅读更多 →
AI原生应用与混合推理技术解析

AI原生应用与混合推理技术解析

1. AI原生应用的本质与核心特征AI原生应用(AI-Native Applications)是指从设计之初就以人工智能为核心构建的软件系统,而非在传统应用上简单添加AI功能。这类应用具有三个显著特征:数据驱动架构:系统各模块围绕数据流设…

2026/7/24 7:46:35 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻