Lucene查询类IndexSearch管理问题
这周接到的任务是对搜索引擎全文检索的优化,又遇到一个问题,请大家帮忙。
请问您们是怎么管理lucene查询类IndexSearch的关闭,
网上有一篇外文写道:关于检索的优化,其中提到对于IndexSearch最好只有一个,因为如果多次构建该对象则引起多次IO操作在很大程度上影响效率,可如果在程序中只有开启而没有关闭那会出现新增的索引要重启web服务器才可检索到。
该怎么解决这个问题。
情况一:
其中在每个检索方法里构建代码如下:
Directory directory = FSDirectory.getDirectory(DocumentIndexerImpl.getIndexSavePath());
IndexSearcher isearcher = new IndexSearcher(directory);
IndexReader reader = IndexReader.open(directory);
在检索完之后有:
isearcher.close();
reader.close();
可会导致每次检索进入这个方法都要进行一次IO操作。
情况二:
如果我不关闭把
//isearcher.close();
// reader.close();
注释掉,则出现新增索引无法检索出来,而用lukeall的工具又可看到新的索引,关闭tomcat,然后再重启tomcat再检索则可检索出来。
[解决办法]
用一个静态的IndexReader来搜索,在每次更新(包括添加和删除)时,调用这个IndexReader的reopen()方法.
[解决办法]
G00d