上篇文章信息检索的过程中提到“索引”一次,可能大家对它还不太理解,我当时学习时也是很吃力的。所以特写下这篇文章针对索引展开讨论。
Q1.为什么要提出索引的概念?
A1.传统的查找,虽结构简单,可当数据达到TB级别时,查找速度是无法忍受的。于是索引便运应而生了。它大大提高了检索速度。
Q2.什么是索引?
A2.索引就是对文档的预处理,就是在文档间建立的数据结构。也可以这样说,索引是一种从某个词指向相关文档的指针。不过索引不支持快速的信息变更。因为这涉及到数据内容的变更,需要对整个数据结构中的关系链进行维护。
Q3.建立索引有哪些方式?
A3.倒排、后缀数组、签名文件。而其中倒排方式建立索引最为常用,所以不再赘述其他方式。
倒排的定义
倒排没有严格的文字定义,但是理解起来非常简单,很符合我们的思维模式。比如说:在我的《水煮三国》一书中的第16页有“长短经”一词。那么在倒排了之后,“长短经”就被作为一个单独的关键词切分出来,保存在索引中。于是当我搜索“长短经”一词时,就会连带的出现“长短经——第16页——《水煮三国》”。这样的搜索比起从文档的第一句开始逐句搜索快速的多。
倒排的特点
1.少量关键字能涵盖文本数据库中的大量信息。据统计,1GB的文本信息,关键字只有5MB左右。
2.倒排的时候耗时多。因为需要对文本进行分词、切词,还要构建索引结构,记录位置信息,同时维护相关内容。
3.倒排后,索引一旦建立,搜索效率会大幅度提高。而且建立起来的索引不需要高频地变更。