有关Lucene查询的效率的问题,为什么第一次查询和后续的查询的效率差距会那么大?

explosion7 发布于 2012/02/24 16:54
阅读 1K+
收藏 0

我使用的是纯粹的Lucene,没有加其他任何的缓存,在对一个field进行范围查询后关闭了IndexSearcher。在进行下一个范围查询时我重新建立了一个IndexSearcher,这次查询效率比第一次高的多,第二次查询的结果集的大小和第一次是一样的,并且范围也没有任何的重合。重复这样的操作,后续的查询结果是效率非常高,比第一次查询的效率高很多。

这种情况究竟是什么原因造成的?如果是Lucene的缓存的话,缓存应该在关闭IndexSearcher后已经失效了吧,还是Lucene有什么特殊的实现?

小弟初到此地,求高手指导。

加载中
0
Andre.Z
Andre.Z

你试试IndexReader关闭下,还有FSDirectory。。。
后面比前面快,那是必须的,少了很多加载过程,否则这部分工作还得自己去做,纠结这个做什么啊。

0
explosion7
explosion7

我每次查完后都调用IndexSearcher的close方法关闭的,下一次查都是重建的,IndexReader应该已经关闭了吧

0
Andre.Z
Andre.Z

http://www.oschina.net/code/explore/lucene-3.0.3/src/java/org/apache/lucene/search/IndexSearcher.java

看源码,看你是怎么创建的。只有一个IndexReader参数,就是不关闭的。

0
explosion7
explosion7

我是用这个接口

public IndexSearcher(Directory path) throws CorruptIndexException, IOException

这种方式建立的Searcher在关闭时候应该会关掉IndexReader吧

返回顶部
顶部