1.倒排索引
倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:“单词词典”和“倒排文件”。
现代搜索引擎的索引都是基于倒排索引,其基本结构如图所示。
2.MR案例需求
输入
输入为文件目录中的N个文本文件
输出
输出每个单词出现的次数以及来源于哪篇文档,按照单词的字母顺序排序,如
Ada /input/1.txt 10
Allen /input/2.txt;/input/3.txt 8
…
3.实现分析
3.1 巧妙使用组合键
因为既要保存单词,又要保存单词出现的文档,定义一个Word组合键方便记录这两个属性,且利用MR自身的排序机制,在组合键中实现compare方法方便MR过程自动排序。
import org.apache.hadoop.io.WritableComparable;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
public class WordWritable implements WritableComparable<WordWritable> {
/**
* 词项
*/
private String word;
/**
* 词项出现的文档路径
*/
private String filePath;
/**
* 默认构造方法
*/
public WordWritable() {
}
/**
* 带属性的构造方法
* @param word
* @param filePath
*/
public WordWritable(String word, String filePath) {
this.word = word;
this.filePath = filePath;
}
/**
* getter setter
* @return
*/
public String getWord() {
return word;
}
public void setWord(String word) {
this.word = word;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
/**
* 排序方法,让MR自动排序
* 使用String的compareTo方法按字母顺序排列
* @param o
* @return
*/
public int compareTo(WordWritable o)