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

倒排索引详解

文章目录倒排索引Inverted Index正排索引与倒排索引实现优缺点倒排索引Inverted Index倒排索引是信息检索领域最核心的数据结构几乎所有搜索引擎Google、Elasticsearch、Lucene都基于它构建。倒排索引是一种将文档中的词项Term映射到包含该词项的文档列表Document List 的数据结构。通常包含两部分词典Dictionary所有出现过的词项按字典序排序方便二分查找。倒排列表Posting List每个词项对应的文档ID列表有时还记录词频、位置等信息。正排索引与倒排索引当查询“search engine”时正排索引需要遍历所有文档 对每个文档逐一检查是否同时包含两个词而对于倒排索引来说首先要查词典得到两个词的倒排列表search → [Doc1, Doc2] 和 engine → [Doc1, Doc2] 然后再求交集得到 [Doc1, Doc2]实现下面例子中构建好的词典和倒排列表如下所示词典倒排列表and[Doc3(freq1)]are[Doc3(freq1)]both[Doc3(freq1)]great[Doc2(freq2), Doc3(freq3)]i[Doc0(freq1), Doc1(freq1)]is[Doc2(freq1)]java[Doc1(freq3), Doc2(freq1), Doc3(freq1)]love[Doc0(freq2), Doc1(freq1)]programming[Doc0(freq1)]python[Doc3(freq1)]输出结果如下importmathfromcollectionsimportdefaultdictclassInvertedIndex:def__init__(self):self.docs{}# 文档ID - 原始文本self.inverteddefaultdict(dict)# 词 - {doc_id: term_frequency}self.doc_count0# 文档总数defadd_document(self,text):添加一篇文档自动分配IDdoc_idself.doc_count self.docs[doc_id]text# 简单分词转小写按非字母数字分割wordsself._tokenize(text)# 统计词频tf{}forwordinwords:tf[word]tf.get(word,0)1# 更新倒排列表forword,freqintf.items():self.inverted[word][doc_id]freq self.doc_count1def_tokenize(self,text):基础分词小写 按非字母数字分割importre wordsre.findall(r\w,text.lower())returnwordsdefsearch_and(self,query):AND查询返回同时包含所有查询词的文档ID列表termsself._tokenize(query)ifnotterms:return[]# 获取第一个词的文档集合result_setset(self.inverted.get(terms[0],{}).keys())forterminterms[1:]:result_setset(self.inverted.get(term,{}).keys())returnsorted(result_set)defsearch_or(self,query):OR查询返回包含至少一个查询词的文档ID列表termsself._tokenize(query)result_setset()forterminterms:result_set|set(self.inverted.get(term,{}).keys())returnsorted(result_set)deftfidf_score(self,doc_id,term):计算文档doc_id中词term的TF-IDF权重tfself.inverted.get(term,{}).get(doc_id,0)iftf0:return0# 包含该词的文档数dflen(self.inverted.get(term,{}))idfmath.log((self.doc_count1)/(df1))1# 平滑returntf*idfdefsearch_ranked(self,query):根据TF-IDF对AND查询结果排序termsself._tokenize(query)candidate_docsself.search_and(query)# 先求交集scores[]fordoc_idincandidate_docs:scoresum(self.tfidf_score(doc_id,term)forterminterms)scores.append((doc_id,score,self.docs[doc_id]))# 按得分降序排序scores.sort(keylambdax:x[1],reverseTrue)returnscores# 示例使用if__name____main__:indexInvertedIndex()docs[I love love programming,# love 出现2次I love Java Java Java,# love 1次, Java 3次Java is great great,# Java 1次, great 2次Python and Java are both great great great# great 3次, Java 1次]fordocindocs:index.add_document(doc)print(AND查询 love java:,index.search_and(love java))print(OR查询 love java:,index.search_or(love java))print(排序查询 java great:)fordoc_id,score,textinindex.search_ranked(java great):print(f Doc{doc_id}: {text} (score{score:.4f}))优缺点查询速度快直接通过词查文档列表时间复杂度 O(1) 词典查找 O(文档数) 列表合并远快于遍历所有文档O(N)支持复杂度与、或、非AND、OR、NOT可以通过倒排列表的交、并、差高效计算可扩展性好可以分片存储Shard支持海量数据灵活的相关性排序可以存储词频TF、文档长度等实现 TF-IDF、BM25 等排序算法构建和维护成本较高存储空间需求大需要预处理所有文档分词、归一化、排序消耗时间和计算资源新增、删除、修改文档需要重建或更新倒排索引尤其是传统静态索引

相关文章:

倒排索引详解

文章目录倒排索引(Inverted Index)正排索引与倒排索引实现优缺点倒排索引(Inverted Index) 倒排索引是信息检索领域最核心的数据结构,几乎所有搜索引擎(Google、Elasticsearch、Lucene)都基于它…...

e1547:让社区浏览体验回归纯粹的定制化浏览器

e1547:让社区浏览体验回归纯粹的定制化浏览器 【免费下载链接】e1547 A sophisticated e621 browser 项目地址: https://gitcode.com/gh_mirrors/e1/e1547 问题引入:当浏览变成筛选的艺术 在内容爆炸的时代,每位用户都渴望看到真正感…...

新手福音:通过快马平台零代码基础玩转picoclaw机器人板

作为一个刚接触嵌入式开发的新手,拿到picoclaw控制器时既兴奋又忐忑。这块小小的板子能控制电机、读取传感器,但如何让它动起来却让我一头雾水。好在发现了InsCode(快马)平台,不需要从零开始啃文档,就能快速生成可运行的示例代码。…...

Kali 2025.4上部署HexStrike AI踩坑实录:从MCP连接失败到完美运行的完整排错指南

Kali 2025.4上部署HexStrike AI踩坑实录:从MCP连接失败到完美运行的完整排错指南 HexStrike AI作为新一代AI驱动的渗透测试框架,理论上只需几条命令就能完成部署。但现实往往比文档复杂得多——特别是当你在深夜赶项目,却发现MCP客户端死活连…...

NVIDIA Profile Inspector完整指南:解锁显卡隐藏性能的终极免费工具

NVIDIA Profile Inspector完整指南:解锁显卡隐藏性能的终极免费工具 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 还在为游戏卡顿、画面撕裂而烦恼吗?NVIDIA Profile Inspecto…...

2026年在职研究生论文降AI工具推荐:理论与实践结合部分如何处理

2026年在职研究生论文降AI工具推荐:理论与实践结合部分如何处理 导师发消息说论文AI率超标的时候,我正在食堂吃饭。筷子都差点拿不稳。 后来用了三天时间研究在职研究生论文降AI,踩了不少坑但总算搞定了。最后稳定在用的就是嘎嘎降AI&#…...

Math.js 使用教程

Math.js 是 JavaScript 生态里最强大、通用的数学计算库,核心解决原生 Math 功能弱、精度差、无表达式解析、不支持复数/矩阵/单位等痛点。一、核心定位与优势 兼容浏览器 & Node.js,无外部依赖支持:高精度数、复数、分数、单位、矩阵、符…...

33.3%提及率,直接提及却为0%:张雪机车的AI搜索“假性存在”危机

一次小范围诊断,暴露了一个关键信号:品牌在AI生成答案中的“存在感”,远没有看起来那么安全。近日,张雪机车在国内大火,各大媒体都对张雪本人做了铺天盖地的报道。我们是做GEO(生成式搜索优化)服…...

3大核心功能提升50%英雄联盟操作效率的开源工具

3大核心功能提升50%英雄联盟操作效率的开源工具 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾在排位赛中因手速慢错过最佳英雄选择时…...

9篇8章2节:MIMIC 数据库的 CITI 注册与课程选择(2026年版)

作为包含敏感患者信息的公共数据库,MIMIC 对使用权限的申请设置了严格的伦理与合规门槛,其核心目的在于保障患者隐私、维护学术诚信。其中,通过 CITI Program 的人体研究伦理认证是不可或缺的前置条件,也是衡量研究人员是否具备合规研究素养的关键标准。本文将详细拆解 202…...

开源模组加载器SMAPI全攻略:从新手配置到冲突解决的进阶指南

开源模组加载器SMAPI全攻略:从新手配置到冲突解决的进阶指南 【免费下载链接】SMAPI The modding API for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/smap/SMAPI 如何通过SMAPI实现安全模组管理?三大核心优势解析 非侵入式架构…...

[安卓逆向]问题解决:Xposed-Disable-FLAG_SECURE的截图限制解除与实战部署

[安卓逆向]问题解决:Xposed-Disable-FLAG_SECURE的截图限制解除与实战部署 【免费下载链接】Xposed-Disable-FLAG_SECURE Xposed Module to Disable FLAG_SECURE, enabling screenshots, screen sharing and recording in apps that normally wouldnt allow it. 项…...

ThinkPHP3.x核心特性全解析

好的,我们来梳理一下 ThinkPHP 3.x 版本的主要特性:MVC 架构支持:严格遵循模型(Model)-视图(View)-控制器(Controller)的设计模式。清晰分离业务逻辑、数据操作和页面展示,便于协作开发和维护。路由支持:支持多种 URL …...

从需求到原型自动生成!传统产品经理升级AI产品架构师的智能化研发工作流

在人工智能技术深度渗透各行业的今天,产品研发领域正经历颠覆性变革——传统“需求调研→文档撰写→原型绘制→评审修改”的线性研发模式,已难以适配数字化时代“快速迭代、精准落地”的核心需求。与此同时,聚焦人工智能技能培养与评估的CAIE…...

股票相似K线匹配的Python实现:Tushare数据+皮尔逊相关系数全解析

股票相似K线匹配的Python实战:从数据获取到模式识别全流程 在量化交易领域,K线形态分析一直是技术派投资者的重要工具。传统的人工识别方法效率低下且主观性强,而借助Python和现代统计学方法,我们可以实现K线模式的自动化识别与匹…...

游戏开发中的“场”魔法:用梯度、散度模拟水流、烟雾与热量扩散

游戏开发中的“场”魔法:用梯度、散度模拟水流、烟雾与热量扩散 在《塞尔达传说:王国之泪》中,林克挥动魔法杖时涌动的岩浆、随风飘散的蒲公英,或是《艾尔登法环》里腐败湖面蒸腾的毒雾——这些令人屏息的动态效果背后&#xff0c…...

单目相机实战:用OpenCV的solvePnP实现物体位姿估计(附Python代码)

单目相机实战:用OpenCV的solvePnP实现物体位姿估计(附Python代码) 在机器人导航、增强现实和工业检测等领域,精确获取物体相对于相机的位置和姿态是关键挑战。单目相机因其成本优势和轻量化特点,成为许多视觉系统的首选…...

e1547:重新定义e621浏览体验的现代化客户端解决方案

e1547:重新定义e621浏览体验的现代化客户端解决方案 【免费下载链接】e1547 A sophisticated e621 browser 项目地址: https://gitcode.com/gh_mirrors/e1/e1547 你是否曾在浏览e621社区时感到界面混乱、功能分散?是否期望一个能够提供个性化内容…...

3个创新维度破解直播回放获取难题:douyin-downloader深度解构与实战指南

3个创新维度破解直播回放获取难题:douyin-downloader深度解构与实战指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and brows…...

突破ThinkPad散热限制:TPFanCtrl2智能风扇控制完全指南

突破ThinkPad散热限制:TPFanCtrl2智能风扇控制完全指南 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 ThinkPad笔记本以其稳定性和性能在专业用户中享有盛…...

设备预测性维护模型构建方法

构建设备预测性维护模型需要结合数据采集、算法选择和实际应用场景。以下是核心步骤:数据采集与预处理 设备运行数据是模型的基础,需通过传感器、SCADA系统或IoT设备采集振动、温度、电流等参数。原始数据通常包含噪声,需进行滤波、归一化和缺…...

2026最权威的十大AI写作工具实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能技术于毕业论文写作进程当中的运用愈发广泛,其关键价值在于提高研究效率…...

如何用 AI Agent Harness Engineering 重构企业生产流程:一套可复制的落地方法论

如何用AI Agent Harness Engineering重构企业生产流程:一套从0到亿可复制的落地方案书关键词:AI Agent、Harness Engineering、企业生产流程重构、智能协作体、低代码Agent编排、端到端流程自动化、ROI可验证落地摘要:当ChatGPT引爆通用人工智…...

怎样高效激活Windows和Office:KMS_VL_ALL_AIO智能激活脚本完整指南

怎样高效激活Windows和Office:KMS_VL_ALL_AIO智能激活脚本完整指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO KMS_VL_ALL_AIO是一款强大的智能激活脚本,专门用于Win…...

终极指南:5步将S905L3-B电视盒子刷成Armbian服务器

终极指南:5步将S905L3-B电视盒子刷成Armbian服务器 【免费下载链接】amlogic-s9xxx-armbian Supports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, rk3588, rk3…...

终极热键冲突检测指南:3分钟定位Windows快捷键失效元凶

终极热键冲突检测指南:3分钟定位Windows快捷键失效元凶 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否曾…...

深入解析wxappUnpacker:5个高效技巧还原微信小程序源码

深入解析wxappUnpacker:5个高效技巧还原微信小程序源码 【免费下载链接】wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 作为微信小程序开发者,你是否曾想深入了解优秀小程序的实现原理,或者需要分析…...

《算法题讲解指南:动态规划算法--子序列问题(附总结)》--32.最长的斐波那契子序列的长度,33.最长等差数列,34.等差数列划分II-子序列

🔥小叶-duck:个人主页 ❄️个人专栏:《Data-Structure-Learning》《C入门到进阶&自我学习过程记录》 《算法题讲解指南》--优选算法 《算法题讲解指南》--递归、搜索与回溯算法 《算法题讲解指南》--动态规划算法 ✨未择之路&#xff0…...

ParaView实战:5分钟搞定热流图单元格体积计算(附Python脚本)

ParaView热流分析实战:从单元格体积计算到三维可视化全流程指南 在计算流体力学和热传导分析中,准确获取网格单元的体积数据是后续量化分析的基础。许多工程师在处理复杂几何体的热流分布时,常常陷入繁琐的手动计算或复杂的编程工作中。实际上…...

MTK NV数据损坏 刷机、串号修复、串号修改 ,基带调试 工具教程

MTK 机型刷机工具 SP Flash Tool 最常用的 MTK 芯片刷机工具,支持通过 USB 线刷固件(ROM)。需下载与机型匹配的 Scatter 文件(MTxxxx_Android_scatter.txt)和固件包。操作时需进入设备的 BROM 模式(通常通…...