索引能够类比一本书的目录,经过目录咱们能够快速定位到想要找的内容。一样,在数据库中存储了海量的数据,经过建立索引,咱们能够较快速的查询到指定的内容。java
一般状况下,好比传统的关系型数据库(RDBMS),常见的有mysql、Oracle,此类数据库中,咱们建立的索引通常为正排索引,即存储(key,value)的数据时,经过对key建立索引,来寻找value。mysql
与上面的方式不一样,lucence则是经过value来查找key的方式来建立索引。sql
lucence是基于java进行开发的。其将资源以Document 为对象进行存储,每一个文档由一些列Field构成。对field建立索引,关联文档的惟一id。一般状况下,当储存一个新的文档时,会对文档数据分词,即获取Fields,接着建立倒排索引,其存储结构为:词项的字符串+词项的文档频率+记录词项的频率信息+记录词项的位置信息+跳跃偏移量。简单的理解能够造成如下结构:数据库
分别表示词,词出现的文档编号,文档中出现的频率和文档中出现的位置。这样当咱们对词进行搜索时,会找到该词出现过的全部文档的ID,而后再经过该文档的ID寻找文档的具体内容。.net
固然,Lucene词典中词的顺序是按照英文字母的顺序排列的,这样就能够采用压缩存储:假设有term,termagancy,termagant,termina四个词。每一个字母须要1byte的空间,常规存储一共须要35byte。而压缩存储以后为:"term4agancy8t4inal",一共须要22byte,节省大量的空间。
对象
参考资料:https://blog.csdn.net/chunlei_zhang/article/details/38520315blog