倒排索引的精致结构

AI代码质量评估与优化:从算法效率到安全漏洞的实战指南 在软件工程实践中,代码质量评估是确保软件可靠性与可维护性的核心环节。其基本原理在于通过多维度的自动化与人工检查,识别代码中的潜在缺陷、性能瓶颈和安全风险。随着AI辅助编程工具的普及,这一传统领域面临新的挑战与机遇。AI生成的代码虽然提升了开发效率,但常隐藏着算法效率低下、资源管理不当、安全漏洞等隐患,这使得建立系统化的评估框架变得尤为关键。从技术价值看,有效的AI代码质量评估不仅能保障软件的功能正确性,更能优化性能、防范安全风险,从而降低后期维护成本。在实际应用场景中,开发者需从功能性、结构性、性能与安全性 阅读详情

前文提到倒排索引就是一个字典,字典的 Key 是关键词,字典的 Value 是文档 ID 列表(PostingList)。但是如果再深入一些,就完全不是这么回事,不论是 Key 还是 Value 其内部的实现结构都要比一个简单的字典复杂的太多。

class InvertedIndex {
  Map<String, PostingList> mappings;
}

class PostingList {
  List<Integer> docIds;
}

class PostingList {
  List<PostingHeader> docHeaders;
}

class PostingHeader {
  int docId;
  int freq;
  ...
}

接下来我们先分析一下 Key 的存储结构。如果让你来设计 Key 的存储,你会怎么做呢?一个很简单的想法就是使用 LRU 算法,将常用的 Key 放在内存里,不常用的 Key 淘汰到磁盘上。那么对应内存的结构就是 LRUMap。

class InvertedIndex {
  LRUMap<String, PostingList> mappings;
}

class InvertedIndex {
  LRUMap<String, PostingList> mappings;
  BloomFilter<String> blooms;
}

首先将所有的词汇组织成一颗前缀树,某些叶子节点可能会很深。FST 只保留比较浅的节点在内存中,也就是说如果某个节点很深,它将会从 FST 中踢出去。如此内存就不会因为词汇太多而膨胀。

FST 就好比一颗大树的主干部分,细枝末节都在磁盘上有序存储。FST 的末端节点会存储一个指针指向磁盘上的位置,不同的节点指向不同的位置,相同前缀的词汇在磁盘上会连续有序存储。当一个词汇在匹配 FST 的过程中,匹配到了末端节点就会继续去磁盘上去顺序查找直到可以确定找到或者没找到这个词汇。如果找到了这个词汇,那么这个词汇的边上就会有一个指向 Value 所在磁盘位置指针,接着就可以去取得这个词汇(关键词)对应的 Value(PostingList) 将它加载到内存中。

为了加深理解,我们再从逆向角度来描述这个结构。现在所有的 Key/Value 对都按照 Key 排序好了紧凑地存储在磁盘上,如果将所有的 Key 都放在内存里作为索引那这就是没有经过优化的状态。如果我们不取所有的 Key,而是将连续若干个 Key 的前缀挑选出来作为「课代表」再放进内存中,那么内存就会明显少了许多。当需要定位具体的 Key 时,先找到课代表,再定位到「课代表」指向的磁盘位置去就近遍历查找目标 Key。

另外 PostingList 也可以很大,直接将整个 PostingList 加载到内存显然也是不合适的。

Lucene 当然考虑了这一点,PostingList 在内存中是以 Skiplist 「跳跃列表」的形式存在的。这个数据结构我们以前在 Redis 的 zset 数据结构中遇到过,Lucene 中的 Skiplist 和 Redis 中的 Skiplist 是一样的。只不过 Redis 的 Skiplist 全部在内存中,而 Lucene 的 PostingList 可能只是部分在内存中。Lucene 的策略是只将 Skiplist 中的高层节点放在内存中,当需要访问底层节点时需要额外的一次 IO 读取操作。这样可以显著降低内存压力,因为有些词汇关联的 PostingList 可能特别长,消耗内存会特别多,这属于时间换空间的折中优化。

Lucene 为什么要将 PostingList 设计成跳跃列表呢,这是为了做加速文档的交集运算。当查询的条件是两个 MUST 时,需要对两个词汇的 PostingList 进行交集计算。计算交集时会选择短的列表作为「驱动列表」,驱动列表的指针在往前走时,另外一个列表也要跟着往前跳。就好比一个大人和一个小孩走路,大人走得快,小孩就得跟着跑才能追赶上。同时因为跳跃列表的高层都在内存中,所以跳起来会非常的快,这样的交集运算就会有比较好的性能。

综上所述,倒排索引的 Key 和 Value 都是部分放在内存中,从这点来说 FST 和 Skiplist 的结构具有一定的相似性,它们都是有高度的数据结构,高层的数据留在内存中,底层的数据淘汰到磁盘上,查找方向是先定位高层再定位底层。

本文介绍的 FST 和 Skiplist 的知识点是不准确的,但是这并不妨碍我们理解他们的大致功用。关于 FST 和 Skiplist 的更多细节,后面再继续深入研究。

AI Agent架构设计:四象限认知系统与工程直觉 AI Agent并非增强版脚本,而是具备感知、认知、行动与记忆能力的闭环认知系统。其核心原理在于突破LLM单点决策局限,通过结构化信息流编排与状态可控的执行机制,构建抗幻觉、可干预、可演化的智能体。技术价值体现在将不确定性任务转化为可验证、可回溯、可收敛的工程问题,支撑金融投顾、工业诊断、电商售后等高可靠性场景。本文聚焦真实产线沉淀的四象限架构(感知/认知/行动/记忆)与关键工程直觉,如意图锚定、目标树约束、记忆衰减控制和人工接管反馈环,为构建真正能干活的Agent提供可落地的系统性方法论。 阅读详情

相关推荐

AI求职不是简历优化,而是业务问题解决能力的系统性重构

AI求职的本质是技术能力向业务价值的转化过程。在当前AI招聘生态中,ATS系统、 Hiring Manager 和团队负责人共同构成多层信号筛选漏斗,核心关注点已从‘是否掌握PyTorch/Transformer’等技术概念,转向‘能否识别JD背后的业务约束并给出可验证的工程解法’。这要求求职者具备问题驱动思维、工程权衡意识与全链路落地认知——即理解数据合规、模型鲁棒性、服务SLA保障及业务指标归因。尤其在大模型推理优化、LLM微调落地、AI平台工程化等高频场景中,能将技术动作锚定于具体业务瓶颈(如LoRA

dht91597的博客 309

一文助你了解ElasticSearch的底层经典数据结构——倒排索引

倒排索引还有很多进一步的优化技术,比如索引压缩、布尔匹配排序、聚合查询优化、缓存优化、索引重建优化等,这些技术可以根据实际应用场景的特点进行选择和组合,从而有效提高倒排索引的查询效率和应用效果。缓存优化:倒排索引查询是一个相对较耗时间的操作,可以通过使用缓存技术,将查询结果缓存到内存或者其他介质中,当下次再次查询相同的关键词时,直接从缓存中读取结果,避免重复查询,提高查询速度。倒排索引的核心是由所有文档中的单词建立的索引表,这个表通过单词查找指向文档列表(或词项出现位置列表)的指针。

每天努力Coding 2648

SAP PP未清生产订单关闭物料退料、新工单发料批量处理

( werks = '1001' lgort = 'A004' lgobe = '组装-成品组装' )( werks = '1002' lgort = 'C006' lgobe = '组装-二车间' )( werks = '1002' lgort = 'C007' lgobe = '组装-二车间' )( werks = '1001' lgort = 'A007' lgobe = '组装-MS' )( werks = '1001' lgort = 'A008' lgobe = '组装-GW' )

dingqing86的专栏 1193

什么是倒排索引?

为什么需要倒排索引 倒排索引,也是索引。 索引,初衷都是为了快速检索到你要的数据。 每种数据库都有自己要解决的问题(或者说擅长的领域),对应的就有自己的数据结构,而不同的使用场景和数据结构,需要用不同的索引,才能起到最大化加快查询的目的。 对 Mysql 来说,是 B+ 树,对 Elasticsearch/Lucene 来说,是倒排索引。 Elasticsearch 是建立在全文搜索引擎库 Lucene 基础上的搜索引擎,它隐藏了 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTf

u013008898的博客 2万+

OpenClaw安装方式那么多,但建议大家还是用云厂商吧

OpenCloud的安装方式多样,包括One-liner、npm、pnpm和Hackable等。One-liner提供高效的单行命令安装;npm和pnpm作为Node.js包管理工具,分别提供常规和高性能的安装选项;Hackable则支持定制化安装。不同系统(macOS、Windows)和终端(PowerShell、CMD)的操作步骤各有特点,用户需根据自身技术背景选择合适的安装方式。官方推荐使用闲置计算资源或云部署方案以获得更佳体验。

涛涛讲AI 1401

InSAR数据获取实战指南:Sentinel-1、精密轨道与ALOS PALSAR DEM的下载与应用

本文详细介绍了InSAR数据获取的实战指南,重点解析Sentinel-1数据、精密轨道数据(OPOD)和ALOS PALSAR DEM的下载与应用技巧。通过实际案例和代码示例,帮助读者掌握数据筛选、下载加速、校验及多源数据协同使用的关键方法,提升地面形变监测的精度与效率。

weixin_29215815的博客 433

倒排索引:ES倒排索引底层原理及FST算法的实现过程

这也许是你全网你能找到的最详细的倒排索引的底层解读。博主把倒排索引的讲解划分为以下七个部分,理解难度递增,可根据自身需要选择依次阅读或者针对性阅读。通常来说,应付一般的面试,理解第一部分即可。如果需要面试搜索相关业务的岗位,需要深层次理解倒排索引,可根据自身情况选择阅读。本文花费了作者大量的精力来论证和整理,如果你喜欢作者的文章,请帮忙点个赞和关注吧 O(∩_∩)O ~。谢谢大家的支持。提到ES,大多数爱好者想到的都是搜索引擎,尽管这是个误区,但是也不得不提。大数据搜索最重要的三个要素分别是 “快”、“准”

Elastic开源社区 2万+

VTK四视图联动避坑指南:解决vtkImagePlaneWidget窗宽窗位同步与切片序号更新的那些坑

本文详细解析了VTK四视图联动开发中的关键技术点与常见问题,包括切片位置同步、窗宽窗位同步的实现原理及回调机制设计。针对开发中遇到的回调事件不触发、渲染性能低下等问题,提供了实用的解决方案和优化技巧,帮助开发者高效构建医学影像和科学可视化应用。

weixin_42638178的博客 392

深度剖析Elasticsearch核心倒排索引数据结构

Elasticsearch 简介 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。Elasticsearch 建立在全文搜索引擎 Apache Lucene™ 基础上,通过 Lucene 的倒排索引技术实现比关系型数据库更快的过滤,从而很方便的使大量数据具有搜索、分析和探索的能力。 毫无疑问,Elasticsearch的底层核心是倒排索引。 Elasticsearch通过扩展服务器集群的方式,将数据以文档的形式,FST压缩的方式,分布式实时存储;同时为文件每一个字段添加倒排索引

BigData_Hubert的博客 2833

【以太网硬件一】802.3xx标准怎么这么多?它们有什么关系?

IEEE 802.3标准发展历史简介

highman110的博客 5018

信号的反射(振铃、台阶、回勾、尖峰毛刺)

反射是怎么形成的 假设信号传输过程中,经过两个阻抗不同的区域,如下图所示。区域1阻抗为Z1,区域2阻抗为Z2。 在分界面处,电压必须是连续的,否则,在分界面处会产生无穷大的电场,这在真实世界中是不可能的。 同样,分界面两侧的电流必须是连续的,否则分界面处会产生无穷大的磁场。 因此: 根据欧姆定律,必然有: 显然如果Z1≠Z2的情况下,上面式子不可能同时成立。如何理解这一困境? 应该从 ...

sinat_15677011的博客 1万+

lucene实时 增量索引_Lucene 倒排索引的精致结构

前文提到倒排索引就是一个字典,字典的 Key 是关键词,字典的 Value 是文档 ID 列表(PostingList)。但是如果再深入一些,就完全不是这么回事,不论是 Key 还是 Value 其内部的实现结构都要比一个简单的字典复杂的太多。class 首先对于 Key 而言,它代表的只是一堆关键词。但是关键词多了内存就是个问题,会非常消耗内存,特别是对于海量的中文文档而言,这个词汇量可能多达几...

weixin_39725154的博客 184

基于卷积神经网络CNN实现电力负荷多变量时序预测(PyTorch版)

随着智能电网的发展,精准的电力负荷预测对能源调度和电网稳定具有重要意义。本文基于PyTorch框架,提出一种基于卷积神经网络(CNN)的多变量时间序列预测模型,用于电力负荷的短期预测。

时序笔记 989

Excalidraw图解搜索引擎:倒排索引工作原理

通过手绘风格的Excalidraw图解,直观展示倒排索引的工作原理:从分词、构建词项映射到查询执行,揭示搜索引擎如何实现毫秒级检索。结合可视化与技术思维,降低理解成本,提升团队沟通效率。

weixin_35748962的博客 476

【中项第三版】系统集成项目管理工程师 | 第 1 章 信息化发展

【中项第三版】系统集成项目管理工程师 | 第 1 章 信息化发展

静谧、淡雅 6580

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Z-Image Turbo版本迭代:新功能上线的更新日志解读

本文介绍了如何在星图GPU平台自动化部署🚀 Z-Image Turbo 本地极速画板镜像,实现高效AI图片生成。该镜像通过智能画质增强和稳定性优化,可快速生成高质量图像,适用于电商设计、社交媒体配图等创意场景,大幅提升内容创作效率。

weixin_42596011的博客 251

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

假如面试官和你死磕elasticSearch?

假如面试官和你死磕elasticsearch,你怎么回答才能获取面试官的青睐?

爱学习的小白 336

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Roaring Bitmap

是一种专门为设计的高性能压缩位图数据结构。Roaring Bitmap 通过。这正是 Lucene直接借鉴它的原因。

risc123456的博客 266

《走进搜索引擎》

【评  价】 (共32条)参与评论 【作  者】梁斌 [同作者作品] [作译者介绍] 【出 版 社】电子工业出版社 【书 号】 9787121049224 【上架时间】2007-10-15 【出版日期】 2007 年10月 【开 本】 16开 【页 码】 272 【版 次】1-1 ...

java开发指南博客 【转载】 129

搜狗研发笔试题深度解析:从C++到底层系统设计

计算机基础是研发工程师的立身之本,而C++内存管理与数据结构设计则是其中核心。理解指针、引用、static关键字等语言特性,掌握Trie树、哈希表等结构的工程应用,是构建高性能系统的前提。在多线程与高并发场景下,生产者消费者模型、锁与条件变量等同步机制直接决定服务稳定性;缓存与分布式一致性设计则关乎海量请求的响应效率。这些技术原理不仅出现在搜狗等大厂笔试中,更贯穿于搜索引擎、输入法等真实产品的研发流程。本文结合搜狗2016研发工程师笔试题,梳理考点背后的底层逻辑与工程实践,帮助读者将笔试经验迁移到实际项目。

weixin_33928137的博客 498

图数据库实操:用 Nebula Graph 破解成语版 Wordle 谜底

在玩汉兜过程中,笔者发现用 Nebula Graph 的图查询来解 Antfu 的汉兜(中文成语版 Wordle)会是件特别有意思的事情,很适合用来做图数据库查询语言的体操,来一起实操一把…

weixin_44324814的博客 954

读书笔记(V) 编程珠玑

编程珠玑是著名的算法手册,两本书都很薄,但真正做到了字字珠玑,以前买书就像买白菜一样求大而全,读完了之后,却味同嚼蜡,收获甚少。这两本书慕名买了很久,却没有去细读它,最近项目结束,有了闲暇,读了几篇,立刻让我如同发现了新大陆,因为上次做项目用到的一些优化技巧,这本书几乎都涉及到了,就在一句话的简短描述中。 说实话,除了编程珠玑外,我还忽略了一部书,也就是高德纳的计算机程序设计艺术,至少是在以前我

RONGE-KUTA的博客 998

通义深度搜索+自有知识库:企业级语义搜索架构设计

语义搜索正从关键词匹配升级为意图驱动的信息处理范式,其核心在于将大模型能力与结构化知识库深度融合,实现可解释、可审计、可降级的确定性响应。技术原理上需突破上下文窗口限制、权限穿透风险与输出不确定性三大瓶颈,依托通义企业API构建分层协议栈,通过查询解析、混合检索、受控生成与结果校验四步闭环保障精度与安全。该架构特别适用于制造业维修知识、法律判例库、教育教研资料等高合规、强溯源场景,本质是将知识库从静态仓库重构为组织级神经系统。

diaoju3333的博客 587

个人 AI 记忆如何跨工具复用:用 Markdown、索引和 Skill 搭一个可治理的记忆库

<think>我们只需要根据内容生成不超过150字的摘要。内容较长,需要提取核心:关于个人AI记忆跨工具复用,用Markdown、索引和Skill搭可治理记忆库。强调存储用户持有的数据与规则,而非平台Skill实现;通过写入、召回、冲突、时效、权限、证据可检查协议。给出五层目录,过滤垃圾信息,区分个人记忆与Task State等。摘要需精炼。</think>本文提出用Markdown、索引和Skill构建可跨工具复用的个人AI记忆库,强调记忆应作为用户持有的数据资产而非平台专属实现。通过六项可检查标准(所有

zzz_2368的博客 651
上一篇: 一个朴素的搜索引擎实现
下一篇: 面试题:请解释一下什么是虚拟内存?
码洞
博客等级 码龄10年 41粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值