搜索引擎的基础-倒排索引
2015-08-25 11:06
218 查看
昨天看hadoop视频的时候里面提到了google搜索引擎里使用的倒排索引技术,当时没有理解,今天翻阅了一些文档终于觉得拨云见日了,下面从用户在谷歌首页进行网页搜索这个角度来说明。
首先上一张图:
![](http://images0.cnblogs.com/blog2015/777853/201508/251053569364000.jpg)
简单的来说,当用户在搜索框输入一个关键词点击查询按钮后,后台程序首先会计算出所查询词的哈希值,然后去哈希表里寻找匹配项,哈希表的每一项通过指针指向一个哈希冲突表,哈希冲突表里存放着具有相同哈希值的单词。也就是说,搜索的第一步获取一个和用户搜索关键词相同哈希值的单词列表(冲突表)。然后会用这个冲突表里的单词和用户搜索词一一比较,找到完全匹配的单词。而冲突表中的每个单词对应一个倒排列表,如下图:
![](http://images0.cnblogs.com/blog2015/777853/201508/251100380141299.gif)
这是一个最简单的倒排列表,每个单词对应唯一的单词ID,每个文档(即用户搜索后返回的网页)对应唯一的DocId,倒排列表中记录着每一个单词在哪些文档中出现过。比如跳槽这个单词,在编号为1,4的文档中出现过,那么就返回编号为1,4的两个网页作为搜索结果展示在页面上。
首先上一张图:
![](http://images0.cnblogs.com/blog2015/777853/201508/251053569364000.jpg)
简单的来说,当用户在搜索框输入一个关键词点击查询按钮后,后台程序首先会计算出所查询词的哈希值,然后去哈希表里寻找匹配项,哈希表的每一项通过指针指向一个哈希冲突表,哈希冲突表里存放着具有相同哈希值的单词。也就是说,搜索的第一步获取一个和用户搜索关键词相同哈希值的单词列表(冲突表)。然后会用这个冲突表里的单词和用户搜索词一一比较,找到完全匹配的单词。而冲突表中的每个单词对应一个倒排列表,如下图:
![](http://images0.cnblogs.com/blog2015/777853/201508/251100380141299.gif)
这是一个最简单的倒排列表,每个单词对应唯一的单词ID,每个文档(即用户搜索后返回的网页)对应唯一的DocId,倒排列表中记录着每一个单词在哪些文档中出现过。比如跳槽这个单词,在编号为1,4的文档中出现过,那么就返回编号为1,4的两个网页作为搜索结果展示在页面上。
相关文章推荐
- eclipse常用快捷键
- win7下安装redies
- 欢迎使用CSDN-markdown编辑器
- ARC之解决闭包引起的循环强引用
- 【加权并查集】【只需要写merge其他直接模板】
- Ubuntu14.04 64 安装nginx之 缺少 libpcre.so.1
- 芯片手册查询网站
- SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)
- jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
- 获取UILabel每一行显示的文字(UILabel 最后一行显示标签)
- redis
- jsch记录
- 《Java实战开发经典》第五章5.5
- 数据归一化方法
- Android-Code-Style
- Nginx基础知识. Nginx模块开发
- Android 单元测试(三)总结
- VS2015 cordova尝试-camera
- 正则表达式在iOS中的运用(附手机密码邮箱等正则判断)
- Hibernate的HQL查询及原生sql查询语句写法