摘要: 为MongoDB中的数据构建倒排索引(Inverted Index),然后缓存到内存中,可以大幅提升搜索性能。本文将通过为电影数据构建演员索引,介绍两种构建倒排索引的方法:MapReduce和Aggregation Pipeline。
GitHub地址:
作者: KiwenLau
日期: 2016-09-11
一. 倒排索引
倒排索引(Inverted Index),也称为反向索引,维基百科的定义是这样的:
是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。
这个定义比较学术,也就是比较反人类,忽略...
倒排索引是搜索引擎中的核心数据结构。搜索引擎的爬虫获取的网页数据可以视为键值对,其中,Key是网页地址(url),而Value是网页内容。网页的内容是由很多关键词(word)组成的,可以视为关键词数组。因此,爬虫获取的网页数据可以这样表示:
<url1, [word2, word3]>
<url2, [word2]>
<url3, [word1, word2]>
但是,用户是通过关键词进行搜索的,直接使用原始数据进行查询的话则需要遍历所有键值对中的关键词数组,效率是非常低的。
因此,用于搜索的数据结构应该以关键词(word)为Key,以网页地址(url)为Value:
<word1, [url3]>
<word2, [ur1, url2, url3]>
<word3, [url1]>
这样的话,查询关键词word2,立即能够获取结果: [ur1, url2, url3]。
简单地说,倒排索引就是把Key与Value对调之后的索引,构建倒排索引的目的是提升搜索性能。
二. 测试数据
MongoDB是文档型数据库,其数据有三个层级: 数据库(database),集合(collection)和文档(document),分别对应关系型数据库中的三个层级的: 数据库(database), 表(table),行(row)。MongDB中每个的文档是一个JSON文件,例如,本文使用的movie集合中的一个文档如下所示:
{
"_id" : Objec