谈谈百度搜索为什么那么快?

Baidu:C#利用百度来搜索网页、图片、视频等等 我们可以不用每次都先进入百度主页,然后输入关键词,然后点击搜索。直接做一个控制台程序,打开搜索页面就OK了。 【网通】点击此处下载全部源程序      【下载说明】 1、单击上面这个地址,打开下载页面。 2、点普通下载--等待30秒--点“下载”按钮--保存 主要源程序: // Author: PJ using System; using System.Web; using Sy 阅读详情

目录

某种处理

某种计算

两次遍历法

排序法


首先我们知道,百度肯定是有爬虫,到处爬取网页,进行某种处理。然后通过你输入的关键词进行某种计算再返回给你的

某种处理


当百度爬取了海量网页后,每一个网页我们称为”文档“,不可能就杂乱无章的放着,它使用了文档集合,就是类似的文档放在一个集合中

那什么样的文档算类似呢?相信你猜到了,文档中有相同关键字的就可以放在一个集合中

来举例说明

假设全世界只有下面5个文档(网页),文档内容也很简单,就一句话(注意是内容,不是标题)

image-20200507163757569

百度爬取后,将他们进行编号,然后对文档进行扫描分词,因为百度内部有词库,匹配上的词将被切分,所以文档1号将被切分为【谷歌,地图,之父,跳槽,FaceBook】,后面的文档也一样,然后对切分出来的单词进行倒排处理,形成倒排列表

image-20200507164140174

啥是倒排处理?右边这堆杂乱无章的数字咋来的?别急,仔细看,1号单词“谷歌”是不是在1,2,3,4,5号文档都出现过?9号单词“离开”是不是只在3号文档出现过?

是的,倒排列表所做的,就是保存对应单词所出现过的文档编号

我想你开始明白他的目的了,当我们搜索“谷歌”的时候,他就会获得“谷歌”这一单词对应的倒排列表,知道哪些文档包含他,然后将这些文档提取出来返回给你,这就是一种单词映射文档的方法

但是,没那么简单,因为只有这样的话,我在一篇博客上把所有的单词都写上,这样杂乱无章的文章岂不是要被推荐给全体中国人???

所以倒排列表还要保存下列信息

image-20200507164836182

保留的信息变成了二元组,比如16号单词“网站”的(5:1),5表示出现的文档编号,1表示出现的次数,也就是说,有了这个信息,如果一个单词在文档中频率越高(英文缩写TF),搜素引擎就可以把他排在前面推给你

除了频率,还有位置,比如”谷歌“就是在1号文档中出现了一次的单词,位置在第一个,用<1>表示

image-20200507165150616

可能到这你有点记不住有哪些网页了,再看一遍比对下

image-20200507163757569

这样子,搜素引擎就可以根据你的关键词在倒排列表中找到含有这个关键词的文档集合,然后根据关键词在文档集合中各个文档出现的频率和位置综合判断返回给你排序后的文档

实际上很多搜索引擎基本就是这样做的,只不过各家还有别的参考标准,比如百度还会参考热度,你的搜索记录,还有网站给的钱(你懂的)等等综合打分,按评分高低返回搜索结果的排序

上面的所以记录处理好后都会存放在磁盘中,然后等你关键词来后再调入内存

假设世界上只有5个文档,那么上面的东西完全够了,但实际上,世界上有亿万个文档,此时,问题的性质已经变了,不是找不找得到的问题,而是怎么找更快,更准的问题,这需要算法,也就是我们上面提到的某种计算
 

某种计算


第一个问题就是,词库那么多,当你输入“苹果”的时候,百度如何将你的关键词和他内部倒排列表的“苹果”一词联系起来?

计算机是不认识“苹果”的,这里,可以通过哈希的方法将“苹果”转换为一个编号

所谓哈希,即使将一个词通过某种算法映射为一个符号,比如“将单词转换为其长度”就是一种算法,虽然很low,这样“苹果”就是2,“梨”就是1,不同的哈希算法有不同的转换结果,但是必然会有一个东西——哈希冲突,比如“桃子”也是2,此时,需要使用链表,也称冲突表,将编号相同的单词链在一起

image-20200507170500512

当我们搜索“苹果”的时候,经过哈希计算,得知其编号为2,然后发现2中有一个链表,里面可能保存着“苹果”,”桃子”,“蘑菇”等,然后再遍历链表找到苹果即可

这里和java8中的hashmap思想一致,不过链表也会过长,所以可以使用别的数据结构代替,比如红黑树,b树等

解决了第一个问题,我们就可以通过关键词获得他的Id,然后得到所建立的倒排列表了,比如“谷歌”

image-20200507171253060

第二个问题,由于文档的数量庞大,我们获取的文档往往编号位数都很多,而不像上图那样1,2,3,4,5,导致倒排列表无谓的扩大,所以我们这里进行作差

在这里插入图片描述

就是后面的文档编号减去前面的,在取文档(从磁盘中读取)的时候加回来即可

第三个问题,如何从磁盘中读取文档

现在我们已经有了倒排列表

可以有两种方法从磁盘中读取文档

在这里插入图片描述

两次遍历法


第一遍,扫描文档集合,找到文档数量N, 文档集合内所包含的不同单词数M,和每个单词出现的频率DF(如下图),以及一些别的必要信息,这些东西所占内存加起来,得到需要开辟的内存空间,

同时这个空间是以单词为单位划分,比如“谷歌”一词有5篇文档,

第一遍主要就是确定要开辟多大的内存空间来显示文档

第二遍扫描,就是边扫描,匹配对应的文档编号(三元组中的第一个数),载入内存

但是这个方法有一个问题,那就是文档集合有多大,内存就有多大,所以,很可能内存会溢出,不过都放在内存中速度也很快,这是一种空间换时间的方法

相信你发现了,但凡设计到读取,一定有两种以上的方法,空间优先或是时间优先,第二种就是时间换空间——排序法

排序法


现在我们只用固定大小的内存,如何从上图中的倒排列表得知每个单词对应的文章集合所需要的内存空间有多少呢?

我们需要解析文档,构造(单词ID,文档ID,单词频率)三元组,然后进行排序,按单词ID,文档ID,单词频率先后排,最后如果规定的内存满了,就将这些三元组通通写入一个临时文件A中

在这里插入图片描述

为什么要这样呢?想想看,如果我们最后拿到了一个(单词A,文档A,单词频率),我们就可以很轻松的知道一个单词对应哪个文档,和对应的频率,

也就是一个三元组告诉我们单词A对应的文档A,另一个三元组告诉我们单词A对应文档B……,这些三元组加起来我们就知道了单词A对应的文档集合,就可以知道他需要多少内存空间来填补这些文档了

可能解析50个文档后规定的内存就满了,然后把这些三元组们写入磁盘临时文件A,就可以再读下一篇50个文档了,注意,词典是不断增加的,比如前50个文档只有上面7个单词,后50个文档可能出现了别的单词,此时要插入词典中,词典一直在内存

这样,只用固定大小的内存就可以50一批的解析完所有文档,写入了一个个的临时文件A,B,C,D,再将这些临时文件合并,就是把他们分别读入内存中的缓冲区,合成最终索引后再写入磁盘,这样通过最终索引就知道有哪些单词对应多少文档,还有频率,然后根据这些开辟内存空间读取进入内存返回给你即可

image-20200507181036502

排序法叙述起来比较复杂,但是其实理解起来很简单,耐心读一定能懂哦
 

使用vue-baidu-map对百度地图进行输入框搜索定位 最近负责的一个vue项目中需要调用百度地图api做标记打点的需求,记录一下: vue-baidu-map 官方地址 https://www.npmjs.com/package/baidu_map 一.插件的安装 1.npm 安装 npm install vue-baidu-map --save 2.js 引入 index.html 中 指的是public文件夹下的index.html 二.使用 (我是全局注册,局部注册需要声明ak) 1.全局注册(一次性引入百度地图组件的所有组件) main.js 阅读详情

相关推荐

AC baidu插件避坑指南:解决油猴脚本安装后百度搜索重定向失效问题

本文针对AC baidu插件在Tampermonkey(油猴)中安装后,百度搜索重定向功能失效的问题,提供了系统性的排查与解决方案。文章深入分析了脚本冲突、页面结构更新、动态加载冲突等核心原因,并给出了从基础检查到高级诊断的详细步骤,帮助用户彻底解决重定向失效问题,并理解其背后的技术原理。

x8y9z0的博客 598

极客时间——数据结构与算法(44) 最短路径:地图软件是如何计算出最优出行路径的?

基础篇的时候,我们学习了图的两种搜索算法,深度优先搜索和广度优先搜索。这两种算法主要是针对无权图的搜索算法。针对有权图,也就是图中的每条边都有一个权重,我们该如何计算两点之间的最短路径(经过的边的权重和最小)呢?今天,我就从地图软件的路线规划问题讲起,带你看看常用的最短路径算法(Shortest Path Algorithm)。 像 Google 地图、百度地图、高德地图这样的地图软件,我想你应...

weixin_40805079的博客 3038

TSMaster实战:如何用LIN总线唤醒你的汽车电子系统(附波形分析)

本文通过TSMaster工具实战解析LIN总线唤醒机制。详细介绍了LIN网络唤醒的协议要求、时序参数计算,并演示了如何在TSMaster中配置唤醒信号、捕获分析波形,以及验证休眠流程。文章结合常见问题排查,为汽车电子工程师提供了从理论到实践的完整调试指南。

weixin_28308325的博客 460

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

太久没更新了~一次性写多个文章吧 多少总结过来的 参考来的

Zebras_zhku的博客 250

EMC系列EtherCAT总线运动控制器(二):Motion通讯连接、总线配置及诊断

雷赛-EMC系列EtherCAT总线运动控制器(二):Motion通讯连接、总线配置及诊断

weixin_38570076的博客 1887

别再死记硬背HJB方程了!用Python数值求解一个简单最优控制问题(附完整代码)

本文通过Python数值求解Hamilton-Jacobi-Bellman(HJB)方程,帮助读者从工程实践角度理解最优控制问题。教程涵盖从建立简单车辆控制模型到离散化HJB方程、实现值迭代算法及可视化结果的完整流程,适合具备Python基础的开发者学习。

weixin_42520796的博客 371

算法高级(34)-搜索引擎速度快的秘诀-倒排索引介绍

对于数据库查询来说,大家都知道,模糊查询比较耗时,即使建立索引,查起来也不快,而像百度、谷歌这样的搜索引擎,基本上也是模糊查询,而且响应速度特别快,这是为什么呢?其实里面有个很重要的因素,就是使用了倒排索引,这极大地提高了查询效率。而一切的设计都是为了提高搜索的速度。 一、倒排索引和正排索引 倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引。通俗地来讲,正向索引是通...

十步杀一人-千里不留行 2065

OceanBase数据库LSM-Tree存储引擎深度解析:合并写入与压缩优化策略

OceanBase数据库采用创新的LSM-Tree架构设计,通过"基线-增量"分离存储实现高性能。内存中的MemTable处理写入,磁盘上的SSTable存储有序数据,利用多级缓存加速读取。写入时先写日志再更新内存,合并操作将增量数据整合为基线数据以优化查询性能。相比传统B+树引擎,OceanBase在写入吞吐、压缩效率和存储成本方面优势显著,特别适合写入密集型场景。合并操作作为核心机制,通过多种触发方式和执行策略平衡性能与资源消耗。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1342

小白和你一起做百度地图的“路径规划”

百度地图的“路径规划” 1.路径服务简介   路径规划实际上是一种特殊的检索服务,因此,在使用路径规划服务之前首先要对检索相关的方法进行初始化,具体介绍请参考检索服务部分中的第一章节。   注意:在使用检索服务时,请明确唯一的起点和终点,否则将不能搜到您所需结果;当起点或终点信息不唯一时,SDK会为您返回一个起点/终点列表,您可通过选择列表中的信息来完成起点/终点的唯

u012482178的专栏 2912

华为OD机试新系统真题【仓库盘点】

华为OD机试真题 新系统【仓库盘点】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【仓库盘点】

qq_45776114的博客 571

【DeepSeek应用实践】手把手教程:用 AnythingLLM + Ollama + DeepSeek-R1 搭建本地企业知识库

在众多的技术方案中,我们选择了 AnythingLLM、Ollama 和 DeepSeek-R1 这一组合来搭建本地知识库。Ollama 作为一个轻量级的本地化大语言模型部署工具,支持多种模型,易于安装和使用,能够快速在本地运行强大的语言模型。DeepSeek-R1 是一个专为知识库问答设计的检索增强生成(RAG)模型,它结合了检索和生成的优势,能够快速从知识库中检索相关信息并生成精准答案。而 AnythingLLM 则是一个用户友好的界面工具,可以方便地连接 Ollama 和 DeepSeek-R1

寻道AI,探索AI无限可能! 2568

在 OpenClaw 中安装 baidu-web-search skill(百度网页搜索技能)

摘要:本文介绍如何在OpenClaw中安装百度网页搜索技能(baidu-search)。推荐使用ClawHub CLI一键安装,需先安装Node.js(v20+)和ClawHub CLI工具。安装后需配置百度千帆API Key,并编辑配置文件或通过界面设置。验证安装可通过命令行测试或直接对话使用。若自动安装失败,提供手动下载安装方案,包括解压到指定目录、安装依赖等步骤。最后列出常见问题及解决方法,如技能加载失败、搜索问题等。

专注于技术研发行业技术主要有AI人工智能视觉识别、物联网技术、电商平台、app原生技术、微信小程序、鸿蒙语言开发、办公企业oa、ERP等,致力于做东半球最优秀的程序员 4767

【ROS2】机械臂MoveIt2

navigation2 专注于移动机器人的导航与定位,处理大范围空间的底盘运动;MoveIt2 专注于机械臂的操作规划,处理多关节协同的末端执行器运动。在复合机器人(如,移动机械臂)navigation2 负责移动到目标区域,MoveIt2 负责机械臂抓取。官网:https://moveit.picknik.ai/main/index.html。

郭老二 596

【免费下载】 Python Baidu Search API:轻松实现百度搜索的强大工具

`Python Baidu Search API` 是一个非官方的百度搜索接口封装库,专为Python开发者设计。通过这个库,用户可以轻松地在Python项目中集成百度搜索功能,无需复杂的配置或API密钥。该项目支持Python 2和Python 3,并且可以通过pip进行安装,方便快捷。 ## 项目技术分析 ### 技术栈 - **Python**: 作为项目的核心编程语言,支持Pytho...

gitblog_00503的博客 7907

Python爬虫实战:新浪财经股票金融数据全方位抓取教程

本教程系统介绍了新浪财经股票数据爬取技术,从静态网页解析、实时接口请求到异步爬取和数据存储,帮助你搭建了一个完整的金融数据采集流程。未来,可以结合深度学习模型进行行情预测,或者将数据接入量化交易系统,实现自动化投资。

2201_76125261的博客 2210

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

百度搜索为什么这么快?

  在国内,相信检索功能做得最好的速度最快的度娘应该是当之无愧的第一了,那么为什么百度的用户这么多,搜索还这么快,了解百度的问题还是得去百度啊。   我在网上搜到了很多个版本,下面就来总结一下。   1.使用了数据库的搜索技术。也就是在采集信息时就已经分门别类在数据库中放好,相关索引也已经做好。对于大部分搜索,其实引擎并不是直接查询数据库,而是根据提交关键字寻找已经贮备好的最近似关键...

weixin_30687051的博客 2234

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

**重塑搜索体验——AC-baidu脚本,让百度、搜狗、谷歌真正为你服务**

--- ## ✨ 项目介绍 在网络探索的征途中,我们时常被铺天盖地的广告、冗长的重定向以及单调乏味的搜索页布局所困扰。但今天,一款名为**AC-baidu**的开源项目,如同一缕清风,吹散了这一切烦恼。它不仅仅是一款脚本,更是你桌面的一道亮丽风景线,旨在优化你的搜索引擎体验。 --- ## ???? 技术分析 **AC-baidu**基于`TamperMonkey`、`Chrome`和`Sa...

gitblog_00775的博客 1091

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Vue中使用百度地图Vue Baidu Map(vue-baidu-map)

最近负责的一个vue项目中需要调用百度地图api做标记打点的需求,记录一下: vue-baidu-map 官方地址 一.插件的安装 1.npm 安装 $ npm install vue-baidu-map --save 2.js 引入 index.html 中 <script src="https://unpkg.com/vue-baidu-map"></script> 二.使用 1.全局注册(一次性引入百度地图组件的所有组件) import Vue from 'vue' imp

m0_54853503的博客 1万+

Google和Baidu的 常用搜索技巧

"前端GitHub"前端GitHub 作为整体的搜索结果。

张紫娃的博客 1601

AC-Baidu脚本:终极搜索引擎优化方案,让搜索体验飞起来

还在为百度、搜狗、谷歌搜索结果中的广告和重定向烦恼吗?AC-Baidu脚本是一款专为优化搜索引擎体验而设计的开源项目,通过Tampermonkey等浏览器扩展,彻底改变你的搜索方式。这个脚本不仅能去除烦人的广告,还能自定义界面布局,让你的搜索效率提升数倍。 ## 🔥 为什么需要AC-Baidu脚本? ### 广告屏蔽功能 [![AC-Baidu广告屏蔽效果](https://raw.gitc

gitblog_00985的博客 913

重新定义搜索体验:AC-baidu脚本如何解决你的搜索痛点

还在为搜索结果中的烦人广告、缓慢的页面重定向而困扰吗?🤔 今天我要为大家介绍一款能够彻底改变你搜索体验的神器——AC-baidu脚本!这款脚本专门针对百度、搜狗、谷歌、必应等主流搜索引擎进行深度优化,让你的搜索过程更加高效、舒适。 ## 什么是AC-baidu搜索脚本? AC-baidu是一个功能强大的浏览器用户脚本,通过优化搜索引擎的链接加载、去除广告、添加网站图标等功能,为你的搜索体验带

gitblog_00114的博客 825

AC-baidu脚本:如何让百度搜索体验提升200%的终极指南

在信息过载的互联网时代,**搜索效率**已成为每个上网用户的核心需求。你是否曾因搜索结果中的广告干扰、冗长的重定向跳转而感到烦躁?是否希望搜索结果页面能更简洁、更直观、更高效?AC-baidu脚本正是为解决这些痛点而生的一款**浏览器脚本优化工具**,它能彻底改变你的搜索引擎使用体验,让每一次搜索都变得纯净而高效。 ## 🚀 为什么你的搜索需要AC-baidu脚本? **传统搜索的三大痛点*

gitblog_00180的博客 851

AC-baidu脚本:告别搜索烦恼,解锁纯净高效的搜索体验

还在为搜索页面满屏的广告而烦恼吗?还在为每次点击都要等待重定向而抓狂吗?AC-baidu脚本就是你的搜索救星!这款神奇的浏览器脚本能够彻底优化你的搜索体验,让百度、谷歌、必应、搜狗等主流搜索引擎变得清爽高效。无论你是学生党查找资料,还是上班族搜索解决方案,AC-baidu都能让你的搜索效率提升一个档次。 ## 🎯 为什么你需要这个搜索神器? ### 搜索痛点大揭秘 每天使用搜索引擎时,你是否

gitblog_00738的博客 1019

AC-baidu:如何让百度、谷歌搜索体验提升300%的浏览器脚本

你是否厌倦了每次搜索都要点击那些烦人的跳转链接?是否对搜索结果中充斥的广告感到无奈?AC-baidu脚本正是为了解决这些问题而生的浏览器优化工具,它能让你的搜索体验发生质的飞跃。 **AC-baidu是一款专为提升搜索引擎体验而设计的浏览器脚本**,通过绕过重定向、过滤广告、美化界面等多项功能,让百度、谷歌、必应、搜狗等主流搜索引擎的使用变得更加高效和愉悦。无论你是学生、研究人员还是普通用户,这

gitblog_01165的博客 936

vue项目中使用百度地图(vue-baidu-map)

在使用vue做项目的时候,有用到百度地图,使用了vue-baidu-map插件,包括拾取位置坐标,搜索位置等 1.引入方式 可在app.js中全局引入 import BaiduMap from 'vue-baidu-map' Vue.use(BaiduMap, { /* 需要注册百度地图开发者来获取你的ak */ ak: 'YOUR_APP_KEY' }) 也可以局部引入,组件需在node_modules/vue-baidu-map/components里面找,局部引入要在<.

xiaoxinshuaiga的博客 3343
上一篇: 如何应对在线故障
下一篇: 解决SpringBoot + Vue前后端分离跨域问题
_Ricky_
博客等级 码龄10年 971粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值