您的位置:首页 > 其它

lucene笔记____IndexReader和IndexWriter注意事项

2013-05-16 00:08 417 查看
在lucenne的使用中IndexReader和IndexWriter的打开和关闭都是非常耗时的,特别是IndexReader的操作,

(IndexReader 将磁盘上的索引信息读入到内存)

所以在使用时我们一般把IndexReader创建成单实例的,以减少消耗。

看下面的这个例子:

private IndexReader reader;
public IndexSearcher getSearcher(Directory directory) {
try {
if(reader==null) {
reader = IndexReader.open(directory);
} else {
IndexReader tr = IndexReader.openIfChanged(reader);
if(tr!=null) {
reader.close();
reader = tr;
}
}
return new IndexSearcher(reader);
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}


此时reader我们就不关闭,在使用时检查reader是不是存在,那么我们又看到一个函数openIfChanged

看文档的解释:

如果当索引打开时,发现reader有了改变就返回一个新的reader,否则返回null,所以在上面的这个方法中我们使用openIfChanged

来判断是不是原来的reader。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lucene