[ lucene FAQ ] IndexSearcher初始化,IndexSearcher(Directory dir)和IndexSearcher(IndexReader reader)有什么区别?到底使用那个更合理?
2010-10-14 14:21
483 查看
lucene问题汇总:
Lucene常见问题汇总
IndexSearcher的构造方法如下:
其中指定到索引给出了两种方式:
1.给出索引的Directory;
2.给出索引的IndexReader;
从源代码可知:
public IndexSearcher(Directory path) throws CorruptIndexException, IOException {
this(IndexReader.open(path, true), true);
}
public IndexSearcher(Directory path, boolean readOnly) throws CorruptIndexException, IOException {
this(IndexReader.open(path, readOnly), true);
}
public IndexSearcher(IndexReader r) {
this(r, false);
}
直接给出Directory的构造方式其实也是打开了一个IndexReader,不过在调用方法
IndexSearcher(IndexReader r, boolean closeReader)
时给出的第二个参数(closeReader)为true,而直接给出IndexReader实例的构造方法给出的closeReader参数为false。
那么这个参数到底起到什么作用呢?
我们来看看IndexSearcher的Close方法的源码:
public void close() throws IOException {
if(closeReader)
reader.close();
}
原来使用Directory的构造方法在执行IndexSearcher的close方法后会将IndexReader关闭,
而是用IndexReader实例的构造方法在执行close方法后不会讲IndexReader实例关闭。
可以理解为IndexReader实例和IndexSearcher实例是分离的。
可以这么说?两种方式的区别就是IndexSearcher实例close后给出的IndexReader实例是否关闭!
那么在实际应用中,应该是用那种方式呢?
从源码中可以看出,使用Directory构造的IndexSearcher实例各自持有一个IndexReader实例,若系统中存在多个IndexSearcher实例时,将影响系统的性能(占用过多的内存空间)。
理想的做法应该是一份索引用一个IndexReader实例打开,IndexSearcher实例是用IndexReader进行构造。
Lucene常见问题汇总
IndexSearcher的构造方法如下:
Constructor Summary |
---|
IndexSearcher(Directory path) Creates a searcher searching the index in the named directory, with readOnly=true |
IndexSearcher(Directory path, boolean readOnly) Creates a searcher searching the index in the named directory. |
IndexSearcher(IndexReader r) Creates a searcher searching the provided index. |
IndexSearcher(IndexReader reader, IndexReader[] subReaders, int[] docStarts) Expert: directly specify the reader, subReaders and their docID starts. |
1.给出索引的Directory;
2.给出索引的IndexReader;
从源代码可知:
public IndexSearcher(Directory path) throws CorruptIndexException, IOException {
this(IndexReader.open(path, true), true);
}
public IndexSearcher(Directory path, boolean readOnly) throws CorruptIndexException, IOException {
this(IndexReader.open(path, readOnly), true);
}
public IndexSearcher(IndexReader r) {
this(r, false);
}
直接给出Directory的构造方式其实也是打开了一个IndexReader,不过在调用方法
IndexSearcher(IndexReader r, boolean closeReader)
时给出的第二个参数(closeReader)为true,而直接给出IndexReader实例的构造方法给出的closeReader参数为false。
那么这个参数到底起到什么作用呢?
我们来看看IndexSearcher的Close方法的源码:
public void close() throws IOException {
if(closeReader)
reader.close();
}
原来使用Directory的构造方法在执行IndexSearcher的close方法后会将IndexReader关闭,
而是用IndexReader实例的构造方法在执行close方法后不会讲IndexReader实例关闭。
可以理解为IndexReader实例和IndexSearcher实例是分离的。
可以这么说?两种方式的区别就是IndexSearcher实例close后给出的IndexReader实例是否关闭!
那么在实际应用中,应该是用那种方式呢?
从源码中可以看出,使用Directory构造的IndexSearcher实例各自持有一个IndexReader实例,若系统中存在多个IndexSearcher实例时,将影响系统的性能(占用过多的内存空间)。
理想的做法应该是一份索引用一个IndexReader实例打开,IndexSearcher实例是用IndexReader进行构造。
相关文章推荐
- lucene的IndexReader的初始化过程
- [iOS]NSString到底使用Copy还是使用Strong属性,有什么区别
- [ lucene FAQ ] Lucene删除文档,使用IndexReader还是IndexWriter?
- [iOS]NSString到底使用Copy还是使用Strong属性,有什么区别
- lucene使用教程5 --常用类的对象之IndexReader
- 第2章 Java编程基础——FAQ2.22 创建String对象时, 使用String s=new String (“abc”)和String s=“abc”语句有什么区别?
- lucene的IndexReader的初始化过程
- [iOS]NSString到底使用Copy还是使用Strong属性,有什么区别
- 使用Lucene的IndexReader读取索引文件的信息
- 在R语言中,使用“=”和“<-”到底有什么不同? 就是等号和箭头号有什么区别,是完全一样还是局部不同?
- 仔细思考一个接口的不同实现得到的类和一个类的不同对象使用起来到底有什么区别?
- Lucene IndexReader,IndexWriter,IndexSearcher 缓存应用
- 转 abap中sy-index和sy-tabix使用的时候有什么区别
- lucene的IndexReader的初始化过程
- [ lucene FAQ ] 检索结果怎么排序?对于不同类型(例如int型)的字段排序有什么区别吗?
- 视频和图像到底有什么区别
- MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT有什么区别?各适用
- OnRButtonDown OnContextMenu到底有什么区别
- 内核文件ntoskrnl.exe, ntkrnlpa.exe, ntkrnlmp.exe, ntkrpamp.exe到底有什么区别
- 在JSP中调用JAVA类和使用JavaBean有什么区别?