信息过载
youtube 一分钟上传400小时视频
苹果用户一分钟下载50000个应用
亚马逊每分钟交易额20万美金
google翻译一分钟翻译6950万个单词
数据--信息越来越多
信息的定位检索:准确、迅速
传统检索方式的缺点
文件检索
操作系统常见的是硬盘文件检索
文档检索:整个文档打开时已经加载到内存了;
缺点:全盘遍历,慢,内存的海量数据
数据库检索
like “%三星%” 全表遍历;
like “三星%” 最左特性 不会全表遍历;
无法满足海量数据下准确迅速的定位
mysql 单标数据量 --- 千万级
oracle 单表数据量 --- 亿级
(对下图有疑问的请忽略此图,直接看文字解释)
总结:传统方式无法满足检索的需求(迅速、准确、海量)
全文检索技术(大型互联网公司的搜索功能都是全文检索)
定义:在海量的信息中,通过固定的数据结构引入索引文件,利用对索引文件的处理
实现对应数据的快速定位等功能的技术;
信息检索系统(全文检索技术的应用,搜索引擎百度,google)
信息采集:通过爬虫技术,将公网的海量非结构化数据爬取到本地的分布式存储系统进行存储
信息整理:非结构化数据无法直接提供使用,需要整理,整理成索引文件
信息查询:通过建立一个搜索的应用,提供用户的入口进行查询操作,
利用查询条件搜索索引文件中的有效数据;
结构
问题:非结构化数据,海量数据如何整理成有结构的索引文件(索引文件到底什么结构)?
倒排索引
索引文件是全文检索技术的核心内容,创建索引,搜索索引也是核心,搜索在创建之后;
如何将海量数据计算输出成有结构的索引文件,需要严格规范的计算逻辑---倒排索引的计算
以网页为例:
假设爬虫系统爬取公网数据(2条);利用倒排索引的计算逻辑,
将这两个非结构化的网页信息数据整理成索引文件;
源数据:标题、时间、作者、留言、内容
网页1(id=1):王思聪的IG战队获得LOL世界冠军
网页2(id=2):王思聪又换女朋友了吗?不清楚。
倒排索引第一步:计算分词(数据内容)
分词:将数据字符串进行切分,形成最小意义的词语
(不同语言底层实现是不一样的)
并且每个分词计算的词语都会携带计算过程中的一些参数词语
(来源的网页id,当前网页中该词语出现的频率,出现的位置)
网页1:王思聪(1,1,1),IG(1,1,2),战队(1,1,3),LOL(1,1,4),世界(1,1,5)
网页2:王思聪(2,1,1),女朋友(2,1,2),不清楚(2,1,3)
倒排索引第二步:合并分词结果
合并结果:王思聪([1,2],[1,1],[1,1]),IG(1,1,2),战队(1,1,3),LOL(1,1,4),世界(1,1,5)
女朋友(2,1,2),不清楚(2,1,3)
合并逻辑:所有的网页的分词计算结果一定有重复的分词词汇,合并后所有参数也一起合并
结果形成一批索引结构的数据;
将网页的数据对象(document)和分词结果(index)一起存储到存储位置,形成整体的索引文件
索引文件结构:
对索引文件中的分词合并后的数据进行复杂的计算处理,获取我们想要的数据集合(document的集合)