网易视频云教你如何实现倒排索引
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
网易视频云教你如何实现倒排索引
常规的索引是文档到关键词的映射:文档——>关键词,但是这样检索关键词的时候很费力,要一个文档一个文档的遍历一遍。于是人们发明了倒排索引!倒排索引是关键词到文档的映射:关键词——>文档。因此,只要有关键词,立马就能找到在那个文档里出现过,带来了极大的方便。下面,网易视频云就教教各位,倒排索引究竟是怎么实现的!
1.倒排索引
倒排索引有两种不同的反向索引形式:
●一条记录的水平反向索引(或者反向档案索引)包含每个引用单词的文档的列表。
●一个单词的水平反向索引(或者完全反向索引)又包含每个单词在一个文档中的位置。后者的形式提供了更多的兼容性(比如短语搜索),但是需要更多的时间和空间来创建。举例:
以英文为例,下面是要被索引的文本:
T0 = "it is what it is"
T1 = "what is it"
T2 = "it is a banana"
我们就能得到下面的反向文件索引:
检索的条件"what", "is" 和"it" 将对应这个集合:{0,1}∩{0,1,2}∩{0,1,2}={0,1}。
对相同的文字,我们得到后面这些完全反向索引,有文档数量和当前查询的单词结果组成的的成对数据。同样,文档数量和当前查询的单词结果都从零开始。
所以,"banana": {(2, 3)} 就是说“banana”在第三个文档里(T2),而且在第三个文档的位置是第四个单词(地址为3)。
如果我们执行短语搜索"what is it" 我们得到这个短语的全部单词各自的结果所在文档为文档0和文档1。但是这个短语检索的连续的条件仅仅在文档1得到。
2.Map过程
首先使用默认的TextInputFormat类对输入文件进行处理,得到文本中每行的偏移量及其内容,Map过程首先必须分析输入的
存在两个问题,第一:
第二,通过一个Reduce过程无法同时完成词频统计和生成文档列表,所以必须增加一个Combine过程完成词频统计。
bine过程
将key值相同的value值累加,得到一个单词在文档中的词频,如图。
4.Reduce过程
讲过上述两个过程后,Reduce过程只需将相同key值的value值组合成倒排索引文件所需的格式即可,剩下的事情就可以直接交给MapReduce框架进行处理了。
完整代码如下:
学会倒排索引,跟着网易视频云一起走向云计算的捷径~~~