转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/43982653
http://www.llwjy.com/blogdetail/63d4c488a2cccb5851c0498d374951c9.html
个人的博客小站也搭建成功,网址:www.llwjy.com ,欢迎大家来吐槽~
基本原理
在前面的博客中也说过,程序初始话索引文件是十分消耗系统资源的,因此要想实现实时索引就不能实时的去修改索引文件、重新加载索引文件,就必须考虑如何使用内存来实现这实时索引;在Lucene4.3.1版本(之前的版本也有,但是在后面的版本中就将NRT*相关的类删除了)中NRT*相关类就提供了创建实时索引(伪实时索引)的相关方法,将IndexWrite的相关操作委托给TrackingIndexWriter来处理,实现了内存索引和硬盘索引的结合,通过NRTManager为外部提供可用的索引,当然,在执行commit(之前创建索引中有相关介绍)操作之前,操作的数据都是存在内存中,一旦宕机或者服务重,这些数据都将丢失,因此就需要自己添加一个守护线程去不断的执行commit操作(commit操作十分消耗系统资源,索引不可能每一次修改都去执行该操作)。下面就通过几个简单的图来介绍一下实时索引的实现原理:
在系统刚启动时候,存在两个索引:内存索引、硬盘索引,当然此时内存索引中是没有任何数