了解搜索引擎技术

2023-11-16

百度、Google搜索引擎核心技术是怎么实现的

 

搜索引擎

 

搜索引擎(search engine)是指根据一定的策略、运用特定的计算机程序搜集互联网上的信息,在对信息进行组织和处理后,并将处理后的信息显示给用户,是为用户提供检索服务的系统。

全文搜索引擎是名副其实的搜索引擎,国外代表有Google,国内则有著名的百度搜索。它们从互联网提取各个网站的信息(以网页文字为主),建立起数据库,并能检索与用户查询条件相匹配的记录,按一定的排列顺序返回结果。

根据搜索结果来源的不同,全文搜索引擎可分为两类,一类拥有自己的检索程序(Indexer),俗称“蜘蛛”(Spider)程序或“机器人”(Robot)程序,能自建网页数据库,搜索结果直接从自身的数据库中调用,上面提到的Google和百度就属于此类;另一类则是租用其他搜索引擎的数据库,并按自定的格式排列搜索结果,如Lycos搜索引擎。

用户输入关键词进行检索,搜索引擎从索引数据库中找到匹配该关键词的网页;为了用户便于判断,除了网页标题和URL外,还会提供一段来自网页的摘要以及其他信息。

搜索引擎一般由搜索器、索引器、检索器和用户接口四个部分组成:
①搜索器:其功能是在互联网中漫游,发现和搜集信息;
②索引器:其功能是理解搜索器所搜索到的信息,从中抽取出索引项,用于表示文档以及生成文档库的索引表;
③检索器:其功能是根据用户的查询在索引库中快速检索文档,进行相关度评价,对将要输出的结果排序,并能按用户的查询需求合理反馈信息;
④用户接口:其作用是接纳用户查询、显示查询结果、提供个性化查询项。

纯净搜索引擎
这类搜索引擎没有自己的信息采集系统,利用别人现有的索引数据库,主要关注检索的理念、技术和机制等。

垂直搜索引擎
垂直搜索引擎是相对通用搜索引擎的信息量大、查询不准确、深度不够等提出来的新的搜索引擎服务模式,通过针对某一特定领域、某一特定人群或某一特定需求提供的有一定价值的信息和相关服务。其特点就是“专、精、深”,且具有行业色彩,相比较通用搜索引擎的海量信息无序化,垂直搜索引擎则显得更加专注、具体和深入。

 

转载声明: 本文转自 http://blog.sina.com.cn/s/blog_465f50b90100ftj5.html (新浪博客)

================================================================================

 

了解搜索引擎技术

 

搜索引擎的定义

搜索引擎是传统IR技术在Web环境中的应用。一般来说,搜索引擎是一种用于帮助用户在Internet上查询信息的搜索工具,它以一定的策略在Internet中搜索,发现信息,对信息进行理解,提取,组织和处理,并为用户提供检索服务,从而起到信息导航的目的。

搜索引擎的体系结构

典型的搜索引擎结构一般由以下三个模块组成:信息采集模块(Crawler),索引模块(Indexer),查询模块(Searcher)。

Crawler:从web中采集网页数据
Indexer:对Crawler采集数据进行分析生成索引。
Searcher:接受查询请求,通过一定的查询算法获取查询结果,返回给用户。

-->Crawler
Crawler负责页面信息的采集,工作实现基于以下思想:既然所有网页都可能链接到其他网站,那么从一个网站开始,跟踪所有网页上的所有链接,就有可能检索整个互联网。Crawler首先从待访问URL队列中获取URLs,根据URL从中抓取网页数据,然后对网页进行分析,从中获取所有的URL链接,并把它们放到待访问的URL队列中,同时将已访问URL移至已访问的URL队列中。不断重复上面的过程。
Crawler存在以下的关键问题:
>多线程抓取时的任务调度问题:
搜索引擎会产生多个Crawler同时对网页进行抓取,这里需要一个好的分布式算法,使得既不重复抓取网页,又不漏掉重要的站点。
>网页评估
在抓取网页时存在一定的取舍,一般只会抓20%左右的网页。评估算法中典型的油Google发明的Pgaerank。
>更新策略
每经过一段时间,Crawler对以抓取的数据经行更新,保证索引网页是最新的。
>压缩算法
网页抓取后,通过一定的压缩机制保存到本地,从而减少存储容量,同时也减少各服务器之间的网络通信开销

-->Indexer
搜索引擎在完成用户的检索请求时,并不是即时的检索Web数据,而是从预先采集的网页数据中获取。要实现对采集页面的快速访问,必须通过某种检索机制来完成。
页面数据可以用一系列关键字来表示,从检索毙敌来说,这些关键词描述了页面的内容,只要找到页面,便可以找到其中的关键词,反过来,通过关键词对页面创建索引,便可以根据关键字快速的找到相应的网页。

Indexer中存在的问题:
>索引存储:
一般来讲,数据量和索引量的比例接近1:1。索引的存储一般采用分布式策略,检索的数据分布在不同的服务器上。Google存储索引的服务器大概有1000多台。
>索引更新:
页面数据更新时,索引数据必须相应的更新。更新策略一般采用增量索引方式。
>索引压缩:
索引也存在数据压缩的问题。索引压缩是通过对具体索引格式的研究实现压缩。
>网页相似性支持:
索引的结构还必须为网页相似性分析提供支持。
>多语言,多格式支持:
网页数据具有多种编码格式,通过Unicode,索引支持多种编码查询。同时索引还必须有对Word,Excel等文件格式进行分析的功能。

-->Searcher
Searcher是直接与用户进行交互的模块,在接口上有多种实现的方式,常见的主要是Web方式。
Searcher通过某种接口方式,接受用户查询,对查询进行分词(stemming)处理,获取查询关键字。通过Indexer获取与查询关键字匹配的网页数据,经过排序后返回给用户。
Searcher中的问题:
>检索结果的排序:
对不同的用户采用不同的排序策略。
>排序结果排重:
排重可以提高结果数据的质量。
>检索结果的相似性分析:
主要用在类似网页功能中,需要在索引结构中提供支持。
>检索的速度:
主要依赖索引结构的设计。同时在体系结构上还有很多技术可以用来提升速度。如:Cache,负载均衡等。

相关核心技术:

分布式技术:
当搜索引擎处理数据达到一定规模时,为了提高系统的性能,必须采用分布式技术。Crawler通过多个服务器互相合作,提高数据采集的速度。Indexer在生成索引数据时通过并行算法,在不同机器上同时进行。Searcher也可以在不同的机器上进行同时查询,提高速度。
中文分词:
分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。现有分词算法可以分为三大类:基于字符串比配的的分词方法,基于理解的分词方法和基于统计的分词方法。
网页排序:
现在搜索引擎中网页的 排序主要利用了页面间的链接关系,描述链接的文本以及文本自身内容,重要的链接分析算法有Hits和Pagerank,HillTop等。
海量数据存储:
搜索引擎的挑战之一就是处理数据的巨大,如何存储如此大的数据,数据的更新,快速的检索...
压缩技术:
压缩技术极大的减少了数据的大小,对于不同类型的数据,需要采用不同的压缩方法,主要的数据压缩主要有:网页数据的压缩和索引数据的压缩。选择压缩技术主要从开放性,速度与压缩比等多方面进行综合考虑。Google中选择了Alib(RFC1950)进行压缩,在压缩速度上Zlib超过Bzip,压缩比上Bzip好于Zlib。

 

转载声明: 本文转自 http://www.cnblogs.com/gaoweipeng/archive/2009/09/20/1570357.html(博客园)

================================================================================

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解搜索引擎技术 的相关文章

  • 生成字符串及其子字符串列表的排列的算法

    我已经忘记这个算法有一段时间了 假设我得到了字符串 cccaatt 我试图生成重复字母的每个子串的所有可能变体 EG cccaatt 作为输入将返回 猫 卡特 猫 卡特 ccat 卡特 卡特彼勒 卡特彼勒 cccat cccat cccaa
  • 计算 Adamic-Adar 的快速算法

    我正在研究图形分析 我想计算一个 N N 相似度矩阵 其中包含每两个顶点之间的 Adamic Adar 相似度 为了概述 Adamic Adar 让我从以下介绍开始 给定邻接矩阵A无向图的G CN是两个顶点的所有公共邻居的集合x y 两个顶
  • 用于整数分区的优雅 Python 代码 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我尝试编写代码来解决标准整数分区问题 维基百科 http en wikipedia org wiki Partition 28numb
  • 什么是确定性快速排序?

    我一直在阅读有关快速排序的内容 发现有时它被称为 确定性快速排序 这是普通快速排序的替代版本吗 普通快速排序和确定性快速排序有什么区别 普通 确定性 快速排序在特定数据集上的行为可能非常差 例如 选择第一个未排序元素的实现在已排序数据上的时
  • Python:for 循环 - for i in range(0,len(list) 与 for i in list

    这是一个非常简单的Python 力学问题 为什么我不能只说 for i in range original list 而不是 for i in range 0 len original list 人们通常使用范围而不是前者吗 谢谢 If I
  • 所有可能的骑士在普罗梅拉的棋盘上移动

    是否有可能用马从初始位置 I J 绕过大小为 N N 的棋盘 并且只访问每个方格一次 define A True A I J false active proctype method bit I 4 bit J 3 bit K 1 bit
  • 数组中最远的相等元素

    假设你有一个未排序的数组 你如何找到两个相等的元素 使它们成为数组中最远的元素 例如8 7 3 4 7 5 3 9 3 7 9 0ans 将是7 9 7 1 8 我想到了以下几点 initialise max 0 using hashing
  • 图像算法上的物体计数

    我又接到学校任务了 这次 我的老师给我的任务是创建算法来计算图片上有多少只鸭子 该图与此类似 我想我应该使用模式识别来搜索上面有多少只鸭子 但我不知道每只鸭子适合哪种图案 我认为你可以通过分割鸭嘴并计算鸭嘴的数量来解决这个问题连接的组件 h
  • 快速排序应用程序中这些交换代码行的目的是什么?

    我试图理解快速排序的实现或应用程序以找到第 k 个最小元素 这是我试图理解的代码 public int quicksort int a int start int end int k if start lt end int pivot pa
  • 计算具有 3 个循环的算法的复杂度

    我尝试解决以下练习 以下代码片段最坏情况运行时间的增长顺序是什么 作为 N 的函数 int sum 0 for int i 1 i lt N i for int j 1 j lt i i j for int k 1 k lt j j k s
  • 如何设计一种算法来计算倒数式数学数字难题

    我一直想这样做 但每次我开始思考这个问题时 它的指数性质都会让我大吃一惊 我希望能够理解的问题解决器和代码是针对倒计时数学问题的 给定一组数字 X1 到 X5 计算如何使用数学运算将它们组合起来生成 Y 您可以应用乘法 除法 加法和减法 那
  • 如何检查无向图是否有奇数环

    我试图找到一个 O V E 时间算法来检查是否已连接 无向图有或没有奇数环 我正在考虑对图进行广度优先搜索 并尝试将顶点标记为黑色和白色 以便没有两个标记为相同颜色的顶点相邻 是否有任何已知的更简洁的算法可以在线性时间内解决这个问题 你的方
  • 神经网络的层和神经元

    我想更多地了解神经网络 我正在开发一个 C 程序来制作神经网络 但我坚持使用反向传播算法 很抱歉没有提供一些工作代码 我知道有很多库可以用多种语言创建神经网络 但我更喜欢自己制作一个 关键是我不知道要实现特定目标 例如模式识别或函数近似或其
  • 关于Marching Cubes算法的澄清

    关于Marching Cubes 我对其算法和实现有一些疑问 我已经阅读了 Marching Cubes 的 Paul Bourke 优秀文章以及网站上可用的源代码 但是 我在理解以及如何以自己的方式实现算法方面仍然遇到了一些问题 问题如下
  • 当给定块大小时反转单链表

    有一个单连接链表 并给出了块大小 例如 如果我的链表是1 gt 2 gt 3 gt 4 gt 5 gt 6 gt 7 gt 8 NULL我的块大小是4然后反转第一个4元素 然后是第二个 4 个元素 问题的输出应该是4 gt 3 gt 2 g
  • 坐标算法 - 绕中心旋转

    通过查看这张图片 我想您会很好地理解我的问题 图片已删除 网址不再有效 现在返回广告 所以基本上我想要一个函数 它接受一个对象作为参数 并根据我之前添加的对象数量为该对象提供正确的坐标 假设我将所有这些对象添加到一个数组中 objectAr
  • Java 2d 游戏中的路径查找?

    本质上它是我正在开发的一款吃豆人克隆游戏 我有一个 Enemy 类 并创建了该类的 4 个实例 它们都代表游戏的 4 个幽灵 所有幽灵都会在屏幕的随机区域启动 然后它们必须朝着吃豆人角色前进 当玩家控制吃豆人并移动它时 他们应该跟随它并尽可
  • 总和不小于 key 的数组的最小子集

    给定一个数组 假设为非负整数 我们需要找到最小长度子集 使得元素之和不小于 K K 是作为输入提供的另一个整数 是否有可能找到时间复杂度为 O n n 的大 oh 的解决方案 我目前的想法是这样的 我们可以在 O n log n 中对数组进
  • 使用什么算法来确定使系统达到“零”状态所需的最小操作数?

    这是一种更通用的问题 不是特定于语言的 有关要使用的想法和算法的更多信息 系统如下 它登记朋友群体之间的小额贷款 Alice and Bill要去吃午饭 比尔的卡坏了 所以爱丽丝支付了他的餐费 10 美元 第二天Bill and Charl
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且

随机推荐

  • HttpRunner--自定义输出报告

    httprunner版本 2 5 4 jinja2版本 2 11 httprunner输出的html测试报告 默认的模板文件的路劲为 python安装路径 Lib site packages httprunner templates rep
  • 阻止冒泡(例:a标签上面绝对定位的文字标签【×】

    如何阻止冒泡 直接上图 js如下
  • python+selenium+实战(6)

    web 自动化脚本生成方式 1 selenium IDE 直接录屏 录制完成生成脚本 缺点 容易产生很多错误 解决错误的时间成本太高 2 自己写 remote复用已有浏览器 相当于开启浏览器调试模式 1 配置复用浏览器 注意要关闭浏览器 包
  • 浏览器的渲染原理简介

    http cloudbbs org forum php mod viewthread tid 16940 浏览器的渲染原理简介 复制链接 遇见sharon 超级版主 串个门 加好友 打招呼 发消息 电梯直达 楼主 发表于 昨天 15 48
  • RT1010 PWM 组成配置和 PWMX 的使用

    1 前言 本篇博文将着眼于 i MX RT1010 内部的 eFlexPWM 介绍其各个功能模块 以及 PWM 产生的原理 2 功能模块组成 以下是 RT1010 内部 PWM 的一个 Submoudle 的组成框图 从框图中我们可以看到
  • 操作系统——分页和分段

    连续分配方式会产生很多 碎片 而紧凑方式会将碎片合成可以使用的较大空间 但是代价比较大 所以产生了散列式存储 主要有一下三种方式 目录 分页 分段 段页式 分页和分段的区别 分页 分页式存储管理 将用户程序的地址空间分成若干个固定大小的区域
  • 【代码随想录】——回溯算法理论基础

    回溯是递归的副产品 只要有递归就会有回溯 虽然回溯法很难 很不好理解 但是回溯法并不是什么高效的算法 因为回溯的本质是穷举 穷举所有可能 然后选出我们想要的答案 如果想让回溯法高效一些 可以加一些剪枝的操作 但也改不了回溯法就是穷举的本质
  • AbstractExecutorService 抽象类

    java util concurrent AbstractExecutorService 是 Java 并发编程中的一个抽象类 它定义了 ExecutorService 接口的基本行为 ExecutorService 是一个接口 它提供了一
  • 驱动学习(六)ioctl

    驱动学习 六 ioctl 文章目录 驱动学习 六 ioctl 1 ioctl 2 命令码 2 1 自定义命令码 2 2 标准命令码 2 2 1 合成标准命令码的宏函数 3 测试ioctl linux内核给用户提供了两类系统调用函数 一类是数
  • 计算机中数据的表示

    机器码和真值 机器码 用二进制0 1表示数字的正负 0 表示正号 1 表示负号 且把这个数字放在最高位数字前表示 及把符号位和数值放在一起的称为机器码 真值 就是我们平常表示数字的方式 举例 真值 1001345 机器数就是0 100134
  • 【基于python实现UI自动化】3.2 selenium通过JS定位元素

    python UI自动化之selenium元素定位 1 0 selenium工具介绍 2 0 selenium环境搭建 3 0 selenium常见8大元素定位 3 1 selenium通过By定位元素 3 2 selenium通过JS定位
  • 中小学创客法则

    现在很多小学为了巩固教育成果 帮助孩子提高学习成绩 都会开设一些专业课 格物斯坦表示 想要帮助青少年们在人工智能领域学有所成 就必须掌握一门机器人编程 开展此编程离不开专业创客实验室的布局的 资源的共享 知识的碰撞 思想的创新 行动的实施这
  • 苹果手机代数_iPhone所有型号上市顺序

    iPhone所有型号上市顺序 从2007年1月9日至今 苹果已经发布了十三代iPhone手机产品 虽然并不是每一代的iPhone都是惊世之作 但任何一款都凝聚了苹果对智能手机前沿技术的思考和应用 为了方便大家了解iPhone所有型号上市顺序
  • AltiumDesigner99——常用快捷键

    lt gt 1 PCB布线下 PcbDoc p a 在keep out层画线 u a 清除所有布线 l 将顶层元器件放到底层 注意使用系统自带的英文输入法 q 切换坐标轴单位 mm mil 2 原理图库编辑下 SchLib ctrl hom
  • Linux中闲置一段时间后自动结束会话,[已退出进程,代码为0(0x00000000)]

    Linux中闲置一段时间后自动结束会话 最近在学习Linux时 常常因为闲置几分钟无操作而被结束会话 问题页面如下所示 最终发现问题在于会话配置中的参数ClientAliveInterval设置的太小了 在我的配置中 ClientAlive
  • 关于time模块使用

    在日常使用python中 会遇到很多时间转化的问题 python中时间的格式有很多种 本次主要介绍time模块中的数据格式与各数据格式之间的转化函数 time时间数据的类型 time模块中的时间总共有3种 1 struct time类型 以
  • JQUERY的AJAX中 get()、post()的跨域方法

    get 请求 ajax type get url 你的请求地址 dataType jsonp jsonp进行跨域请求 只支持get data 这里填写是传给服务端的数据 可传可不传 数据必须是json格式 a b c d success f
  • 如何在机器学习中实现分类?

    机器学习和统计学中的分类是一种监督学习方法 其中计算机程序从给定的数据中学习并进行新的观察或分类 在本文中 我们将详细了解机器学习中的分类 本博客涵盖以下主题 目录 什么是机器学习中的分类 机器学习中的分类术语 分类算法
  • 【分治算法】-1.金块问题:递归和分治策略

    例14 2 金块问题 有一个老板有一袋金块 每个月将有两名雇员会因其优异的表现分别被奖励一个金块 按规矩 排名第一的雇员将得到袋中最重的金块 排名第二的雇员将得到袋中最轻的金块 根据这种方式 除非有新的金块加入袋中 否则第一名雇员所得到的金
  • 了解搜索引擎技术

    百度 Google搜索引擎核心技术是怎么实现的 搜索引擎 搜索引擎 search engine 是指根据一定的策略 运用特定的计算机程序搜集互联网上的信息 在对信息进行组织和处理后 并将处理后的信息显示给用户 是为用户提供检索服务的系统 全