下图是一个典型的Lucene4.x的索引结构图: web

Lucene4.x以后的全部索引格式以下所示:
性能
文件名 |
后缀 |
描述 |
Segments File |
segments.gen, segments_N |
存储段文件的提交点信息 |
Lock File |
write.lock |
文件锁,保证任什么时候刻只有一个线程能够写入索引 |
Segment Info |
.si |
存储每一个段文件的元数据信息 |
Compound File |
.cfs, .cfe |
复合索引的文件,在系统上虚拟的一个文件,用于频繁的文件句柄 |
Fields |
.fnm |
存储域文件的信息 |
Field Index |
.fdx |
存储域数据的指针 |
Field Data |
.fdt |
存储全部文档的字段信息 |
Term Dictionary |
.tim |
term字典,存储term信息 |
Term Index |
.tip |
term字典的索引文件 |
Frequencies |
.frq |
词频文件,包含文档列表以及每个term和其词频 |
Positions |
.prx |
位置信息,存储每一个term,在索引中的准确位置 |
Norms |
.nrm.cfs, .nrm.cfe |
存储文档和域的编码长度以及加权因子 |
Per-Document Values |
.dv.cfs, .dv.cfe |
编码除外的额外的打分因素, |
Term Vector Index |
.tvx |
term向量索引,存储term在文档中的偏移距离 |
Term Vector Documents |
.tvd |
包含每一个文档向量的信息 |
Term Vector Fields |
.tvf |
存储filed级别的向量信息 |
Deleted Documents |
.del |
存储索引删除文件的信息 |
复合索引文件是指,除了段信息文件,锁文件,以及删除的文件外,其余的一系列索引文件压缩一个后缀名为cfs的文件,意思,就是全部的索引文件会被存储成一个单例的Directory,而非复合索引是灵活的,能够单独的访问某几个索引文件,而复合索引文件则不能够,由于其压缩成了一个文件,因此在某些场景下可以获取更高的效率,好比说,查询频繁,而不常常更新的需求,就很适合这种索引格式。
lucene索引的基本概念组成由,索引,文档,域和项组成,一个索引,一般包含一些序列的文档,一个文档包含一些序列的域,而一些域又包含一些序列的项,而一些项则包含一些列序列的最低层的字节,注意这里的序列指的是在索引结构中有序,一般有序的这种方式,某些状况能够优化索引结构。lucene使用了倒排索引(Inverted Indexing),来存储索引信息,大大提升了检索效率,倒排索引,举一个通俗的例子,原来基于人们的正常思惟,咱们会存储的是一个文章中出现了那几个单词,而倒排索引,却偏偏相反,它存储的是这个单词,包含在几个文档中,固然这个关系是由倒排链表(存储一系列docid)构成的索引,咱们在检索时,经过这个单词能够快速的定位,它出如今几篇文章中,从而大大提高了检索性能。固然lucene中不单单有倒排索引,也有正向的存储,而倒排之因此是lucene的核心,是由于它提高了检索性能,在检索到一个个具体的文档时,就须要咱们正向的拿出这些信息,反映在实际的代码中就是咱们经过检索获取一个个docid,而后经过一个个docid获取整个文档,而后咱们在正向的获取各个域,以及各个项存储的具体信息,固然前提是你存储了这个字段,若是你只是索引了,而并无存储,那么你只能检索到此条信息,但没法获取具体term的值,这个须要在建索引以前就要设计好,索引的存储结构,那些字段是检索的,那些字段是存储的等等,若是你还须要高亮一些内容,则还须要存储这个域的偏移的位置,经过这样就能准确的在文中标记检索命中的关键词,若是你打算在前台来完成这个高亮,就不要存储这些信息了。