搜索有两个主要阶段:匹配和排名。搜索引擎将二者组合成一个流程以实现一致性。但是这两个在概念上是独立的,我们假设在排名之前已经完成了匹配。

并且一个搜索引擎的生死由其排名的质量决定。

还是老规则,问题三部曲。是什么?为什么?怎么办?

首先来回答一下是什么?

什么是匹配?

假设我现在搜索的是“伦敦公共汽车时刻表”,那么匹配就是搜索整个互联网中包含该字段的网页。匹配阶段也就是回答了“哪个网页与我的查询匹配”。

具体实例见下图:

其次说说为什么匹配?

为一个给出的查询高效地找出所有命中问题。

最后说说怎么匹配?

在说到怎么匹配之前,先来了解一下,什么是索引?

“索引”这个词通常指参考书的最后一个版块。你可能查找所要的概念以固定顺序(通常按字母排序)排列,每一个概念下都列出的具体出现的位置(通常以页码形式出现)。

就像是“cat 124, 523”的索引项。意味着“cat”这个词在第124,页和第523页中出现过。

下面给出三张图,假设这三张图片就是互联网上的三个网页。

1.2.3.

一个用页码表示的简单索引表

a--表示在第3张表中出现

the---表示在第1、2、3张表中出现

以此类推。

在搜索cat 、dog、 while等单词时,搜索引擎可以很快的查找到,但是在实际所搜中,却很难一个词搜索,往往事词语或词组搜索,假设我现在要搜索的是cat sat和“cat sat”.

(注意:这里有无引号的区别)。首先看第一项,搜索引擎很快就搜索到cat和sat在第1、3页出现了。现在搜索第二项,那么搜索引擎首先会搜索含有cat 和sat的页面,这里出现在第1页和第3页,但此时,搜索就卡住了,它不知道具体的顺序是如何?谁在前谁在后?

如何解决这个问题?利用“词把戏”解决。

解决思路:索引不单单只存储页码,还要存储页面内的位置。位置:它们代表了一个词在页面中的位置。比如:第3个词的位置是3,第29个词的位置是29.

那么将以上的三个图以及索引表改为:

123

a--表示在第3页第5个位置

cat--表示在第1页第2个位置,第3页第2个位置

以此类推。

那么我们开始寻找词语“cat sat”,通过查看索引信息("cat":位置:1-2   3-2, “sat”:位置:1-3    3-7)(注意:这里是查看索引就知道位置,而不用查看原始网页)

那么,3-2=1,7-2=5.便知道了"cat sat"之间连在一起的词是在第1个网页。

“词把戏”解决的不仅是短语查询之间的搜索,而且是相邻词语搜索的重要手段之一。一般在查询相邻词五个相邻位置左右。

讲完匹配之后,再来说说排名。

还是一样,首先解决的是,什么是排名?生活中很多例子,考试排名第一,体侧排名最后等等,和生活中的事例一样,只不过互联网中的排名我们看不到而已(这里指普通用户)。

其次解决为什么要排名?挑选出前几个命中并展示给用户的阶段。“排名”对于一个高质量的搜索引擎的绝对不可少的。

怎么排名?其实也就是,排名取决于什么?

真正的问题不是“这个网页和查询匹配吗”,而是“这个网页和查询是否相关”。这里用“相关度”来描述网页与查询相关的紧密程度。

还是用例子来说明:

1.2.

假设现在查询的是  cause malaria(导致疟疾),那么1.中是导致疟疾的相关原因,但是2.中只是恰巧有cause和malaria,但是两个网页都同时命中了,这时候,搜索引擎该怎么分辨出,那个是我们所需要的?

解决方案:“原词把戏”

要想搜索引擎一样分析网页结构。网页结构是以HTML来编写的,包含着大量的标签(tag),那么通过分析这些标签到做到搜索。

那么为什么所要分析网页结构来达到我们的目的。

因为文章的标题。往往一篇文章的标题便是这篇文章的中心大意以及标题的文字往往是我们要搜索的内容,这比起在文章中偶尔出现一两个单词更具有搜索价值。

还是以匹配阶段举得例子为例:

<bodyEnd>  1-12    2-12   3-13

<bodyStart>1-5   2-5   3-5

<titleEnd> 1-4  2-4   3-4

<titleStart>  1-1   2-1   3-1

其他类推。。

假如现在我要查询dog在标题中的网页,那么该如何做呢?

找到了<titleStart>  1-1   2-1   3-1和<titleEnd> 1-4  2-4   3-4以及dog  2-3   2-7   3-11

那么搜索引擎便会查找以“1-”开头的索引,在start以及end之间的便是我们要查找的内容。

例如:1-1    1-4,再搜索dog中的索引,没有“1-”开头的,那么继续往下搜索索引值,2-1      2-4  ,再搜索dog中,发现有“2-"开头,那么判断"2-?"中的?是否在   1<x<4范围之间,发现3处于1~4之间,那么便命中,依次往下搜索。

注意的是:搜索引擎每次都只是查询小部分索引项,就能回应查询,并且搜索引擎只需遍历每个索引项一次。

索引和匹配并非是全部内容,下一篇将会带来PageRank算法--让谷歌腾飞的技术。

http://blog.csdn.net/l_rollback/article/details/52764861

改变世界的9大算法--搜索引擎索引相关推荐

  1. 改变世界的9大算法--PageRank

    "PageRank"一语双关:既是网页排名的算法,也是该方法的主要发明者 拉里 ▪ 佩奇. 首先来了解一下"超链接把戏".超链接,在1945年就已经出现了,是搜 ...

  2. 聊聊改变世界的5大算法

    领关注.星标嵌入式客栈,干货及时送达 [导读] 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.周末了,今天来轻松概 ...

  3. 扒一扒改变世界的十大算法

    Reddit有篇帖子介绍了算法对我们现在生活的重要性,以及哪些算法对现代文明所做贡献最大.这个表单并不完整,很多与我们密切相关的算法都没有提到,如机器学习和矩阵乘法,欢迎你继续补充. 如果对算法有所了 ...

  4. 面向大数据的索引结构研究进展

    面向大数据的索引结构研究进展 严赵峰, 张为华 复旦大学并行处理研究所,上海 201203 摘要:为了保证各类大数据系统的性能,以并发索引结构为核心的高效检索技术变得越来越重要.然而,数据存储体量的增 ...

  5. 教你如何用 Python 来实现一个大数据搜索引擎

    搜索是大数据领域里常见的需求.Splunk和ELK分别是该领域在非开源和开源领域里的领导者.本文利用很少的Python代码实现了一个基本的数据搜索功能,试图让大家理解大数据搜索的基本原理. 布隆过滤器 ...

  6. 十大算法,描述+代码+演示+分析+改进(赶紧收藏!)

    十大算法 1.冒泡排序 ​ (1)算法描述 ​ 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要 ...

  7. java培训:Java的十大算法

    想要学好java语言,就要打好基础,java要学习的东西有很多,今天小编就来和大家说下java的十大算法. 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个 ...

  8. 编程界称霸全球的10大算法,你到底了解几个呢?

    来源:课程图谱博客 本文约2300字,建议阅读9分钟 本文带你了解编程界称霸全球的十大算法. 算法究竟是什么? 简而言之,算法代表经过明确定义的计算过程,用于将输入转化为输出. 可以这样理解,算法是用 ...

  9. 编程面试过程中最常见的10大算法

    编程面试过程中最常见的10大算法 编程语言:C/C++ 1. 字符串 如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法. toCharArray() // 获得字符串对应的char数组 A ...

最新文章

  1. python入门练习题-python入门练习题2
  2. 【数字信号处理】复数的另一种思考之平均风向测量(Python实现)
  3. 【转】RAX,eax,ax,ah,al 关系
  4. Linux配置本地yum源(RHEL8)
  5. DML数据操作语言练习
  6. 客制化键盘键位修改_IQUNIX Slim87 RGB机械键盘评测
  7. Mac latex vscode配置外部PDF阅读器并配置对应跳转
  8. HTML - 元素/标签和属性基础
  9. 移动端的meta标签
  10. 【Java】JavaSE JDK 及离线帮助文档下载链接
  11. 【网络】交换机常用命令
  12. 动力电池SOC估算方法综述
  13. 在Composure去除掉对体积云和雾的捕获
  14. 【OBS】OBS Studio 的安装、参数设置和录屏、摄像头使用教程
  15. 人工智能对商业影响深远,AI可以为中小企业提供五大优势
  16. 修改jar 注入_ORA00600[16703]安装介质注入型勒索病毒恢复案例
  17. 【数据库】ER图进行描述某系统之学习七
  18. freeswitch1.10.7 安装部署排坑
  19. 吃:第二次去吃香草香草
  20. 口腔医学会计算机专业委员会,2019年中华口腔医学会口腔医学计算机专业委员会第十七次全国口腔医学数字化学术会议第二轮会议通知...

热门文章

  1. 英文的设置和英文,数字的换行
  2. 数学建模模型7——主成分分析 PCA【数据型】
  3. 【Semantic框架学习日志】(7)segment的使用
  4. 微信小程序全栈开发实践 第二章 微信小程序组件介绍及使用 -- 2.10 image组件,如何实现图片懒加载?
  5. 使用mysql语句进行分组查询
  6. python求导函数公式_python怎么实现函数求导
  7. 2018.10.12【BZOJ1319】【CEOI2008】oeder(最小割)
  8. PHP生成随机颜色代码(加深颜色)
  9. 路由器计算机无法上网,电脑可以上网路由器不能上网怎么回事? | 192路由网
  10. 第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(沈阳),签到题5题