在indexReader和indexSearch中,如果频繁的去打开索引或者关闭索引,对资源的消耗比较大。所以一般采用单利的模式进行对indexReader的打开。
在indexReader的开发情景中,例如在一个查询的过程中,然后search的线程睡眠十分钟,然后在十分钟之间进行了索引的更新writer.delete(docu)(删除一个索引库中的索引)。但是此时如果继续读索引,它读到的还是旧的数据,并没有读到被修改后的索引库,只有在重新打开reader的时候才会读取到更新后的数据。在关闭资源的时候不关闭reader,整个生命周期只有一个reader.;只是关闭searcher.借助reader.commit()提交reader的方式进行对库的更新。(原来是在关闭的时候,会将数据flush到索引库中的。)。
为了实现索引更新和查询的通步;可以借助reader.openIfChanged().也可以通过对Version进行判断,是否当前的索引被修改。
时间: 2024-10-12 20:50:04