基于hadoop搜索引擎实践——生成倒排表文件(四)
来源:互联网 发布:云计算学习视频 编辑:程序博客网 时间:2024/05/22 06:54
2.3 建立倒排表文件(下面原理引用刘鹏hadoop实战)
在分析完分词,Rank值得计算等问题的解决方案之后,就可以设计相应的MapReduce算法,来建立倒排表,计算,保存Rank和Position等附属信息。
首先定义倒排表存储信息格式,这是算法的输出目标,也是查询程序从倒排表中获取信息的接口。本系统倒排表的存储格式定义如下:
(1)倒排表文件(INVERTED_INDEX_FILE)有若干索引词记录组成,每个索引词记录(TERM_RECORD)是有一个索引词(TERM)和包含该词的所有帖子的信息(MULTI_INFO)组成,其中TERM和MULTI_INFO之间用空格隔开。索引词记录按照顺序追加的方式存放,之间用换行符分隔,例如:
TERM+'\t'+MULTI_INFO+'\r\n'
(2)在每条索引词记录中,TERM是用分词软件切分出来的一个词。而MULTI_INFO则由多个单条帖子信息(SINGLE_INFO)组成。其中SINGLE_INFO和SINGLE_INFO之间用分号隔开。表示如下:
MULTI_INFO=SINGLE_INFO1;SINGLE_INFO2;……;SINGLE_INFONn
(3)单条帖子信息SINGLE_INFO,由帖子ID(DID),索引词语该帖子的Rank值(Rank),索引词在该帖子中出现的位置(POSITIONS)组成,其间用冒号隔开。表示格式如下:
SINGLE_INFO=DID:RANK:POSITIONS
(4)SINGLE_INFO中的DID是唯一指定某个帖子的值。本系统选择原文件中帖子行首在原文件中的偏移量(offset)作为帖子ID(DID)。每个帖子的源文件中有唯一的偏移量,且给定一个偏移量offset后,可以通过在源文件中定位offset,并执行readline操作(帖子和帖子之间用换行符间隔的),即可读出这条帖子的信息。
(5)SINGLE_INFO中的RANK用一个浮点类型的数值表示。
(6)SINGLE_INFO中的POSITIONS由多个单个位置信息(POSITIONS)组成,之间用百分号隔开。表示格式如下:
POSITIONS=POSITIONS1%POSITIONS2%……%POSITIONSn
(7)对于单个位置信息(POSITION),其有标题记标识(ISTITLE),起始位置(START),结束为止(END)组成。之间用竖线隔开,表示格式如下:
POSITIONS=ISTITLE|START|END
下面给出一个索引词记录的存储实例
黑莓 4852292:162.6:1|2|4%0|804|806;42910773:106.26:0|456|458%0|560|562
该实例说明关键词“黑莓”在ID号为“48522292”和“42910773”的两个帖子中出现。在"48522292"中出现了两次,第一次的位置是在标题中,具体出现在第2-4位;第二次出现在正文中,具体出现在第804-806;该词相对于这个帖子的Rank值为162.6
由于倒排表的信息来自于每条帖子,这些帖子可以并行地被处理,因此设计了基于MapReduce的并行算法来建立倒排表。算法描述如下
图1-1 MapReduce建立倒排表的流程图
建立倒排表的算法流程如下:
(1)采用Hadoop默认的文件分给方式,将源文件分成若干个小文件,每个Mapper节点一次只处理一个小文件。
(2)在Map阶段,对于每个小文件采用按行切分的方法输入。每个map函数的输入<key,value>分别是offset和line.其中offset作为key是指输出的这一行的行首相对于整个源文件的偏移量,也就是帖子的DID;line作为value是指输入的一行,在本系统也就是一条帖子,可以从中切分出帖子的TITLE和CONTENT。
(3)对于输入的每条line(一条帖子),在map函数中切分出TITLE和CONTENT中的每个词(TERM)。对于每个词,根据其出现的情况计算出RANK和POSITIONS,将这些信息封装成一个SINGLE_INFO.输出阶段要发送k次(k是切分出来的TERM的个数),每次发射的key和value是TERM及其对应的SINGLE_INFO。
(4)经过分区(Partion)阶段,从Map发射出来具有相同的key(TERM)的<key,value>对会分别发到同一个Reducer端,每个reduce函数会处理具有相同TERM的<key,value>对。
(5)输入到每个reduce函数的相同TERM对应的SINGLE_INFO的数目就是包含这个TERM的帖子的数目,记为num.根据前面介绍的IT-IDF算法,在reduce函数里更新每个SINGLE_INFO里面的Rank值,更新的的公式为RANK=RANK/num.更新后的RANK值就是TERM相对于某个帖子的最终RANK值。
核心代码如下:
具体实现代码可以查看:
离线处理程序:http://download.csdn.net/detail/long1657/8059593
在线处理程序:http://download.csdn.net/detail/long1657/8059567
阅读全文
0 0
- 基于hadoop搜索引擎实践——生成倒排表文件(四)
- 基于hadoop搜索引擎实践——生成倒排表文件(四)
- 基于hadoop搜索引擎实践——生成倒排表文件(三)
- 基于hadoop搜索引擎实践——二级索引文件(五)
- 基于hadoop搜索引擎实践——总体概述(一)
- 基于hadoop搜索引擎实践——在线处理(六)
- 基于hadoop搜索引擎实践——总体概述(一)
- 基于hadoop搜索引擎实践——网页爬取(二)
- 基于hadoop搜索引擎实践——网页爬取(二)
- 基于Hadoop生态圈的数据仓库实践 —— 进阶技术(四)
- 基于hadoop生态圈的数据仓库实践 —— OLAP与数据可视化(四)
- Hadoop实践(四)---生成集群上的监视和调试
- 基于Hadoop生态圈的数据仓库实践 —— 目录
- 基于Hadoop生态圈的数据仓库实践 —— ETL
- Hadoop实践(四)---性能调优
- Hadoop实践(四)---MR作业配置
- hadoop和hive的实践应用(二)——基于Hadoop的数据仓库工具hive搭建
- 基于Hadoop生态圈的数据仓库实践 —— 概述(一)
- 建造者模式在日志系统中的运用
- bzoj3238 [Ahoi2013]差异(SA+单调栈求所有区间最小值和)
- 人工智能很可能毁灭人类
- LintCode:M-Partition Array(快排变种)
- Android 屏幕适配攻略(六)设置通知样图标与启动图标适配
- 基于hadoop搜索引擎实践——生成倒排表文件(四)
- bzoj4973比特战争 kruskal
- C语言中头文件与库文件
- linux常用命令(cd,ls,mkdir,pwd,rmdir,cp,mv,ln)
- Linux下安装FastDFS分布式文件系统
- NVIC中断
- css3 skew坐标轴
- sql中的surbstr_index的应用
- [题解] 关键子工程(DP+拓扑)