搜索技术的秘密(一):概览

搜索引擎背后的秘密:倒排索引与布尔搜索算法解析 倒排索引(Inverted Index)(搜索引擎的“数字地图”)和布尔搜索算法(Boolean Search)(搜索引擎的“逻辑翻译官”)。我们将从基础概念出发,结合代码和生活案例,覆盖从原理到实战的全流程。本文将按“故事引入→概念拆解→原理建模→代码实战→应用场景→未来趋势”的逻辑展开。先通过生活案例理解抽象概念,再用数学公式和代码验证,最后落地到实际应用。文档(Document):搜索引擎处理的基本单位,如网页、文章、邮件(类比:图书馆里的每本书)。关键词(Term) 阅读详情

640?wx_fmt=jpeg

「多字段搜索」是一个非常复杂的话题,设想你有一堆日志记录,有很多字段。然后产品经理希望可以通过各种组合字段进行搜索,比如根据时间段、用户 ID、行为类型、目标 ID 等,得出满足条件的日志记录。

如果是单字段搜索,那很好办,把日志记到关系数据库中,在必要的字段上加索引就可以了。但是一旦涉及到复合条件查询,关系数据库会捉襟见肘。也许你会想到复合字段索引,这确实也是一种很好的解决方案,但是解决的能力也相对比较有限。在遇到复合字段搜索时,我们通常会借助于专业的搜索引擎,比如互联网领域广为使用的 Elasticsearch,本系列文章将会带读者一同潜入 ElasticSearch 的搜索技术,了解一下搜索领域的常用底层解决方案。

搜索引擎的最基础的技术就是倒排索引,它是关键词到文档列表的映射。给倒排索引提供一个原子的查询词汇,倒排索引可以得到与它相关的文档ID 列表。这个文档 ID 在本例中就是一条日志记录的主键 ID,通过这个主键 ID 就可以得到整条日志,这是因为搜索引擎除了倒排索引之外还会存储所有的日志记录,也就是日志 ID 到日志内容 Document 的映射。

class InvertedIndex {
  Map<String, List<Long>> key2docs;
}

class Documents<T> {
  Map<Long, T> docs;
}

在一个日志表上会有多个倒排索引,每个被搜索的字段都会生成一个倒排索引。这样当我们使用复合字段搜索时,通过每个倒排索引都会得到一个 文档ID 列表,然后对这多个文档ID 列表进行交集运算,就可以得到同时满足多个搜索条件的文档 ID 列表。这个交集运算算法也是搜索引擎的另一个重要的秘密之一,它对搜索性能的影响至关重要。

class Table<T> {
  Documents<T> docs;
  Map<String, InvertedIndex> field2Indexes;
}

我们的日志表内容和倒排索引不可能全部放在内存里,所以我们必须决定什么样的数据需要放在内存里,什么样的数据需要放在磁盘上。也许是简单的 LRU 算法,也许是背后有一个类似于 LevelDB 的存储引擎存储了所有的文档 ID 到文档内容,LevelDB 自己会决定哪些文档在内存里哪些文档在磁盘上,以及如何以最小化的 IO 代价拿到磁盘上的文档。如何降低内存又不会显著增加 IO 成本,这又是搜索引擎的又一个重难点之一。类似于 LevelDB 这样的存储引擎能帮我们搞定文档库大字典 docs 的存储,但是倒排索引跟文档库似乎又不太一样,单个 key 对应的文档 ID 列表可以非常长,如果将这个文档 ID 列表看成一个特殊的整体文档,那么这个整体文档会无比巨大,让他在内存里会消耗内存,让它在磁盘上频繁的序列化反序列化 IO 又会导致极高的 IO 成本。这也是一个无比头疼的问题,但是 Elasticsearch 有办法搞定它。

磁盘的成本固然低廉,但是如果使用普通的磁盘估计搜索引擎的效率也会大打折扣,因为搜索引擎不可避免会涉及到磁盘 IO,单次搜索往往会涉及到多次磁盘 IO。并发搜索进一步让磁盘的磁头繁忙的不可开销。所以对于 Elasticsearch,官方推荐的磁盘依然是 SSD,有了 SSD 磁盘,搜索性能就可以飞起来。如果没有 SSD,至少搜索引擎也是可用的,但是在高并发场景下可能会慢的让你咬牙切齿。

如果使用了昂贵的 SSD,那我们就必须考虑高效的磁盘存储。我们会使用一些特殊的压缩算法,以解决磁盘空间,同时呢又不能让解压缩算法拖慢搜索效率,因为解压缩的过程会涉及到 密集的 CPU 运算。这也是搜索技术的另一个重要当不必要的考虑点之一,尽可能地节约硬件成本。

既然搜索引擎是一个分布式系统,自然我们也不能只考虑单机的存储和计算,我们还需要面对的是它的分片、它的高可用这些复杂的话题。这里会涉及到分片算法、选举算法、查询分割、查询聚合等一系列高阶难题。我们还要搞定一系列网络故障,硬件故障,数据安全性等问题。

搜索引擎还要支持模糊查询,这就涉及到查询范围的扩大化、查询结果的相似度计算以及排序算法。就我们这些提及的讨论点来说,实现一个可用的易用的安全的搜索引擎有多难,而 Elasticsearch 搞定了这些,但是这世界上的搜索引擎非常之多,能够让 Elasticsearch 登顶了纳斯达克的原因不仅仅是这些技术上的因素,还有生态、服务、市场等我们作为程序员难以控制的范畴。这也超出了我的个人能力,在后面的系列文章中,我只会对 Elasticsearch 内部的技术点进行讨论,非技术因素恕我能力有限,互联网上也应该有非常多的文章在讨论 Elasticsearch 成功的秘诀,大家可以自行搜索。这一系列文章在形式上会自由散漫好一些,不会写的像掘金小册那样写的非常精细结构性非常强,有时候可能会为了图快完成任务而没有写的特别丰富多彩,出现一些细微的错误也在所难免,还请大家勇于指正。

下面是字节跳动的内推入口,找出自己心意的职位后,请勇于投递你的个人简历,内部系统的数据安全性做得非常到位,我是看不到你们的简历内容的,所以不必太担心个人隐私问题。北京、上海、深圳、杭州、成都、广州等城市的职位都有,Python、Java、Golang、算法、数据、分布式计算和存储的岗位也都有,个人发挥自己的搜商,进去自行寻找吧。

640?wx_fmt=png

老钱不需要你们的赞赏,投递自己简历就是对我最大的支持

9、高效基于秘密共享的部分匹配搜索技术解析 本文介绍了种高效的基于秘密共享的部分匹配搜索技术,结合Tshift关键字转换和(k,n)阈值秘密共享机制,实现安全且高效的数据搜索。文章详细解析了文档加密、搜索查询生成、精确与部分匹配搜索的协议流程,并通过流程图直观展示搜索过程。安全性分析表明,该方法在信息论上安全,能有效防止半诚实对手的信息泄露,并在关键字重复搜索和前向隐私方面优于传统可搜索对称加密(SSE)方法。同时,文章评估了通信与计算复杂度,提出了减少通信量、优化计算和负载均衡等策略,并展望了多错误纠正、同态加密融合及大规模数据优化等未来方向。 阅读详情

相关推荐

10、高效的基于秘密共享的部分匹配搜索与迷宫勒索软件技术分析

本文介绍了种高效的基于秘密共享的部分匹配搜索方法,能够在加密文档上实现容错的部分匹配,具有高灵活性和准确性。同时,对迷宫勒索软件进行了深入的技术分析,涵盖静态、动态及高级动态分析方法,揭示其行为特征与潜在漏洞。通过结合搜索技术与恶意软件防范策略,为数据安全与网络安全提供全面支持。

z4a5b6的博客 38

阿里巴巴云生态 9 大开源项目重磅发布

11 月 3 日,2022 云栖大会·云计算加速开源创新论坛上,阿里巴巴 9 大开源项目宣布首发或重磅升级,覆盖数据库、云原生、搜索引擎、大数据、基础软件和工具等多个领域。

云布道师 1578

22、量子算法:从秘密异或掩码到暴力搜索

本文深入探讨了量子算法在解决秘密异或掩码问题和暴力搜索问题中的应用,对比了经典解法与量子解法的效率差异。重点介绍了西蒙算法在指数级加速上的优势以及格罗弗算法在二次加速中的原理和操作步骤。通过详细的数学推导和实际案例,展示了量子计算在密码学、搜索问题等领域的潜力。同时分析了当前量子算法在硬件实现和算法优化方面面临的挑战,并展望了未来量子计算在多个领域的发展前景。

docker8compose的博客 147

些牛人榜样,多看看他们写的东西(后续整理牛人的blog等)

计算机大师 Donald E. Knuth(高德纳) 算法大师,我最崇拜的计算机科学家,没有之!不认识高爷爷的人别说自己是学计算机的。《The Art of Computer Programming》绝对是计算机科学的圣经。对高爷爷的崇敬,对编程艺术境界的向往,指引我不断的追求计算机的“艺术”,没有高爷爷的算法艺术就我就不会进入计算机这个领域。高爷爷是我在计算机领域的指路人。 斯坦

ajian005的专栏 2万+

【Android 应用开发】GitHub 优秀的 Android 开源项目

文章转载自 : http://blog.csdn.net/zhixiang2010/article/details/18032871 作者 : Elysee2014 主要介绍那些不错个性化的View,包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar及其他如Dialog、Toast、Ed

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 9万+

原创:搜索算法之两个数组取交集的算法

原创:搜索算法之两个数组取交集的算法 在垂直搜索中,有很多方法可以控制返回结果的数量。比如用户输入"上海世博会",要求只显示跟上海世博会相关的内容。有三种方法可以参考:①BooleanQuery,AND逻辑②phraseQuery,精读最高,只出现"上海世博会"连续的短语的文档③solr的模糊匹配查询。如果采用第种方案,在垂直搜索中(比如Luce...

randy_01的博客 736

了解搜索引擎

了解搜索引擎 平文胜 2003-6-4  在所有网络推广的方法中,搜索引擎是大家谈论最多的,我们的推广之旅也将从这里开始。确实,搜索引擎是网络推广的个非常强大的武器,而且免费——但是我们首先必须了解它们。我们要了解它们是如何工作、如何分类、如何查询……的,而且搜索引擎就像人样各不相同,所以对于特别重要的引擎,我们还需要了解它们的个性。1、两个

程序人生 1492

详解Elastic Search高速搜索背后的秘密:倒排索引

倒排索引是种用于快速检索的数据结构,常用于搜索引擎和数据库中。与传统的正排索引不同,倒排索引是根据关键词来建立索引,而不是根据文档ID。

鸽芷咕的博客 6487

《SEO深度解析——全面挖掘搜索引擎优化的核心秘密

《SEO深度解析——全面挖掘搜索引擎优化的核心秘密》 基本信息 作者: 痞子瑞 出版社:电子工业出版社 ISBN:9787121224041 上架时间:2014-2-28 出版日期:2014 年3月 开本:16开 页码:560 版次:1-1 所属分类:计算机 > 信息系统 更多关于》》》《SEO深度解析——全面挖掘搜索引擎优化的核心秘密》 编辑推荐 ...

weixin_30430169的博客 1320

别让用户大海捞针!搜索引擎设计的4个核心秘密

搜索引擎设计是个技术活,但核心始终是“以用户为中心”。无论用多先进的技术,如果不能帮用户快速找到想要的信息,那都是花架子。希望今天的分享能给大家带来些启发。如果你的系统也有搜索相关的痛点,欢迎关注公众号:服务端技术精选,在评论区留言讨论,咱们起解决!

我爱娃哈哈的专栏 787

中文搜索引擎技术揭密:排序技术()

来源:e800.com.cn 随着“眼球经济”席卷互联网,成千上万的资金迅速流向最能吸引浏览着眼球的搜索引擎市场。有大量调查显示搜索引擎市场正处在高速发展时期,成为了未来几年内最具发展潜力的产业之。随着Google、百度、中国搜索等各具特色的搜索引擎逐渐成为人们最常用的网络工具,企业对搜索引擎的注意力也从“观察”升级为“动武”。 随着市场容量和使用者人数的不断激增,如何完善搜索功能使之更加公平、

Kangsheng的专栏 2062

【C++高阶】高效搜索秘密:深入解析搜索二叉树

在数据结构和算法的广阔领域中,二叉搜索树(Binary Search Tree,简称BST)无疑是颗璀璨的明星。它以其高效的数据检索能力和独特的树形结构,在计算机科学领域扮演着举足轻重的角色。对于任何对编程和数据结构感兴趣的人来说,掌握二叉搜索树都是至关重要的

EterNity_TiMe_的计算机学习之路 2527

搜索引擎Google的小秘密

搜索引擎Google的小秘密搜索引擎Google的小秘密大家对Google都已经很熟悉了,不过知道其中隐藏秘密的朋友却不多,有朋友对这些东西进行了个总结,这里,我就将自己整理的内容告诉您。   微软风格的入口  http://www.google.com/microsoft  MAC风格的入口   http://www.google.com/mac  Linux风格的入口  http://www

domino的专栏 1793

腾讯面试题: 百度搜索为什么那么快?

我还记得去年面腾讯时,面试官最后个问题是:百度/google的搜索为什么那么快? 这个问题我懵了,我从来没想过,搜素引擎的原理是什么 然后我回答:百度爬取了各个网站的信息,然后进行排序,当输入关键词的时候进行文档比对……巴拉巴拉 面试官:这不是我想要的答案 我内心 这个问题我直耿耿于怀,终于今天,我把他写出来,以后再问,我直接把这篇文章甩给他!!! 两个字:倒排,将贯穿整篇文章,也是面试官...

小松与蘑菇 5万+

谷歌:中国版搜索引擎之心不死!

【CSDN编者按】2018年秋天,Google首席隐私官Keith Enright首次公开证实了为中国市场定制的搜索引擎项目「蜻蜓计划」的存在,而该计划的目的就是为了在中...

CSDN资讯 4489

搜索领域PageRank:提升搜索效果的秘密武器

本文旨在全面介绍PageRank算法的核心原理、数学基础、实现方式以及在搜索引擎中的应用。我们将从基本概念出发,逐步深入到算法细节,最后探讨其实际应用和未来发展方向。文章首先通过个生活化的比喻引入PageRank概念,然后详细解释其核心原理和数学模型。接着展示算法实现代码,讨论实际应用场景,最后展望未来发展趋势。PageRank:由Google创始人开发的网页排名算法,通过链接分析评估网页重要性链接分析:通过研究网页间链接关系来评估网页质量的技术阻尼因子:模拟用户随机跳转行为的概率参数网络图。

专注搜索引擎技术 1007
上一篇: 面试题 —— 数字幻方
下一篇: 分布式图数据库 Nebulan Graph 有奖捉虫计划正式开启
codehole_
博客等级 码龄7年 33粉丝 132原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值