`

读lucene3.0.3源码:Directory

 
阅读更多

本来打算自己总结的,看见有篇现成的,转载如下:

 

首先我们看构造函数中的第一个类Directory 类。根据这个类的英文,我们能得出这个类就是关于目录操作的。Directory 是一个抽象类。其有4个子类,分别是:DbDirectory, FSDirectory, JEDirectory, RAMDirectory

首先我们看看Directory 的类
public abstract class Directory {
volatile boolean isOpen = true;
/*** 持有一个LockFactory的实例(实现锁定这个目录实例)*/
protected LockFactory lockFactory;
/**返回该目录下的所有文件数组.如果这个目录下没有文件存在,或者存在权限问题不能访问,该方法可能返回Null*/
public abstract String[] list() throws IOException;
/** * 返回指定名称的文件是不是存在 */
public abstract boolean fileExists(String name)
throws IOException;
/**返回指定名称的文件最后修改的时间
public abstract long fileModified(String name) throws IOException;
/**设置指定文件名的文件最后的修改时间为当前时间*/
public abstract void touchFile(String name) throws IOException;

/**删除指定文件。 */
public abstract void deleteFile(String name)throws IOException;
/**返回指定文件的长度。 */
public abstract long fileLength(String name) throws IOException;
/** 在当前目录下使用给定的名称创建一个空的文件。并且返回一个流来写该文件。*/
public abstract IndexOutput createOutput(String name) throws IOException; 
/** * Lucene使用该方法确保所有的针对该文件的写操作都会存储到Index。并且阻止machine/OS发生故障 破坏该index。*/
public void sync(String name) throws IOException {}
/**获取已经存在的一个文件的IndexInput流操作该文件。 */
public abstract IndexInput openInput(String name) throws IOException;
/** 返回已经存在的一个文件、并且使用指定大小的缓冲的IndexInput,但是当前目录也可能忽略该缓冲池的大小,
* 当前主要是考虑CompoundFileReader和FSDirectory对于次参数的需求。*/
public IndexInput openInput(String name, int bufferSize) throws IOException {
return openInput(name);
}
/** 创建一个指定名称的锁/
public Lock makeLock(String name) {
return lockFactory.makeLock(name);
}
/**
* 清除指定的锁定(强行解锁和删除)这不仅要求在这个时候当前的锁一定不在使用。 */
public void clearLock(String name) throws IOException {
if (lockFactory != null) {
lockFactory.clearLock(name);
}
}
/** 结束这个store. */
public abstract void close() throws IOException;

/**设置LockFactory,此目录实例应使其锁定执行。每个LockFactory实例只用于一个目录(即,不要共用一个实例在多个目录) */
public void setLockFactory(LockFactory lockFactory) {
this.lockFactory = lockFactory;
lockFactory.setLockPrefix(this.getLockID());
}

/** 获得LockFactory,此目录例实例使用其锁定执行。请注意,这可能是无效的目录执行,提供自己锁执行*/
public LockFactory getLockFactory() {
return this.lockFactory;
}
/**过去锁实例的唯一表示ID的字符串描述*/
public String getLockID() {
return this.toString();
}
/**// 拷贝源目录src下的文件,复制到目的目录dest下面,拷贝完成后关闭源目录src*/
public static void copy(Directory src, Directory dest, boolean closeDirSrc) throws IOException {
final String[] files = src.list();
if (files == null)
throw new IOException("cannot read directory " + src + ": list() returned null");
byte[] buf = new byte[BufferedIndexOutput.BUFFER_SIZE];
for (int i = 0; i < files.length; i++) {
IndexOutput os = null;
IndexInput is = null;
try {
// create file in dest directory
os = dest.createOutput(files[i]);
// read current file
is = src.openInput(files[i]);
// and copy to dest directory
long len = is.length();
long readCount = 0;
while (readCount < len) {
int toRead = readCount + BufferedIndexOutput.BUFFER_SIZE > len ? (int)(len - readCount) : BufferedIndexOutput.BUFFER_SIZE;
is.readBytes(buf, 0, toRead);
os.writeBytes(buf, toRead);
readCount += toRead;
}
} finally {
// graceful cleanup
try {
if (os != null)
os.close();
} finally {
if (is != null)
is.close();
}
}
}
if(closeDirSrc)
src.close();
}

从Directory抽象类的定义,我们可以得到如下几点:
1、管理锁工厂及其锁实例;
2、管理Directory目录实例的基本属性,主要是通过文件名称进行管理;
3、管理与操作该目录相关的一些流对象;
4、管理索引文件的拷贝。

 

转自:http://www.blogjava.net/guming123416/archive/2009/04/16/266008.html

 

分享到:
评论

相关推荐

    lucene-3.0.3-src.zip

    《深入剖析Lucene 3.0.3源码:构建高效全文搜索引擎》 Lucene,作为Java领域中的一款强大而广泛使用的全文检索库,自诞生以来就备受开发者青睐。3.0.3版本是Lucene的一个重要里程碑,它在前代基础上进行了优化,...

    盘古分词、lucene3.0.3搜索的使用示例v1.3.zip

    《盘古分词与Lucene 3.0.3在.NET 4.0中的应用实践》 盘古分词和Lucene是两个在文本处理和信息检索领域中至关重要的工具。盘古分词,作为一款优秀的中文分词系统,能够高效准确地对中文文本进行分词,为后续的数据...

    lucene3.0.3搜索的使用示例

    这个"lucene3.0.3搜索的使用示例"压缩包文件很可能是为了帮助用户理解并学习如何在项目中应用Lucene 3.0.3版本的功能。 在Lucene 3.0.3中,主要包含了以下核心概念和知识点: 1. **索引(Indexing)**:这是Lucene...

    Lucene3.0.3+盘古分词 资源汇总

    《Lucene3.0.3与盘古分词:打造高效搜索引擎》 在信息技术日新月异的时代,搜索引擎已经成为我们获取信息的重要工具。Lucene,作为Apache软件基金会的一个开源项目,是Java语言实现的全文检索引擎库,为开发者提供...

    盘古分词、lucene3.0.3搜索的使用示例v1.2

    《盘古分词与Lucene 3.0.3在.NET 4.0中的应用实践》 盘古分词和Lucene是两个在中文信息处理领域广泛应用的工具,本示例将详细介绍如何在.NET 4.0环境中整合这两个组件,以实现高效的全文搜索功能,并新增了分页功能...

    Lucene.net3.0.3源码

    Apache Lucene.Net 3.0.3 just passed a vote for release - our first official release since graduating from the incubator in August. A lot of work was put into porting and testing the code. We've ...

    盘古分词、lucene3.0.3搜索的使用示例.zip

    《盘古分词与Lucene 3.0.3在.NET 4.0中的应用实践》 盘古分词和Lucene是两个在文本处理和全文检索领域中至关重要的工具。本文将深入探讨如何在.NET 4.0环境中集成并使用这两个组件,以实现高效的文本分析和搜索引擎...

    lucene 3.0.3.core.jar

    lucene3.0.3.core.jar文件,不用到apache官方网站下载17M的包,直接下载这个core就可以了。

    lucene源码和教程

    lucene3.0.3源码和教程

    Lucene3.0.3+盘古分词(证实可用,可指定使用自己的词库文件).rar

    在“Lucene3.0.3+盘古分词(证实可用,可指定使用自己的词库文件).rar”这个压缩包中,包含了实现这一功能所需的DLL文件和词库文件,这使得开发者可以轻松地在自己的项目中集成这一功能。 首先,我们要明白Lucene ...

    Lucene 3.0.3 API

    **Lucene 3.0.3 API 深度解析** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发并维护。它提供了基础的索引和搜索功能,允许开发者构建自己的搜索引擎应用。在 Lucene 3.0.3 版本中,我们看到了一...

    适合练手、课程设计、毕业设计的Java项目源码:公交搜索系统(java结合lucene).rar

    适合练手、课程设计、毕业设计的Java项目源码:公交搜索系统(java结合lucene).rar 适合练手、课程设计、毕业设计的Java项目源码:公交搜索系统(java结合lucene).rar 适合练手、课程设计、毕业设计的Java项目源码...

    lucene-core-7.7.0-API文档-中文版.zip

    赠送jar包:lucene-core-7.7.0.jar; 赠送原API文档:lucene-core-7.7.0-javadoc.jar; 赠送源代码:lucene-core-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.7.0.pom; 包含翻译后的API文档:lucene...

    lucene3源码分析

    ### Lucene3源码分析知识点概述 #### 一、全文检索的基本原理 ##### 1. 总论 全文检索系统是一种高效的信息检索技术,能够帮助用户在海量文档中快速找到包含特定关键词的信息。Lucene是Java领域内最受欢迎的全文...

    lucene-3.0.3.zip

    《Apache Lucene 3.0.3:全文检索与搜索引擎核心技术详解》 Apache Lucene 是一个开源的全文检索库,由Java编写,提供强大的搜索功能。在这个3.0.3版本中,它继续展现了其在信息检索领域的强大性能和灵活性。Lucene...

    Lucene3.0分词系统.doc

    Lucene3.0分词系统的核心在于理解和应用其分词原理,无论是对于英文还是中文文本,这一过程都是构建高效搜索引擎的基础。以下是对Lucene3.0分词系统中涉及的关键知识点的深入解析。 ### 英文分词原理 英文分词相较...

    Lucene3.5源码jar包

    本压缩包包含的是Lucene 3.5.0版本的全部源码,对于想要深入理解Lucene工作原理、进行二次开发或者进行搜索引擎相关研究的开发者来说,是一份非常宝贵的学习资源。 Lucene 3.5.0是Lucene的一个重要版本,它在3.x...

    Lucene学习源码.rar

    《深入剖析Lucene:从源码到实践》 Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,主要用于构建搜索引擎。它提供了一个简单但功能强大的API,使得开发者能够轻松地在应用中实现文本检索功能。Lucene...

    lucene.net 2.9.1 源码

    《深入剖析Lucene.NET 2.9.1:源码解析与应用开发》 Lucene.NET 2.9.1是开源搜索引擎库Lucene的.NET版本,它为.NET开发者提供了强大的全文检索和索引功能。这个版本的源码提供了一个宝贵的资源,帮助我们理解其内部...

    Lucene.Heritrix:开发自己的搜索引擎(第2版)

    《Lucene.Heritrix:开发自己的搜索引擎(第2版)》是一本深入探讨如何构建搜索引擎的专业书籍,作者是邱哲。这本书详细介绍了利用Apache Lucene和Heritrix这两个强大的开源工具来创建自定义搜索引擎的技术和策略。 ...

Global site tag (gtag.js) - Google Analytics