lucene-创建文档索引处理框架
1、组成文件索引操作框架的JAVA类
1)DocumentHandler:定义getDocument(InputStream)方法,此方法由所有的文档解析器实现
2)DocumentHandlerException:遇到错误情况时,该类将检测所有从文档解析器抛出的异常
3)FileHanlder:定义getDocument(File)方法,该方法由ExtensionFleHandler类实现
4)FileHanlderException:检测从实现了FileHandler接口的具体类中抛出的异常
5)ExtensionFileHandler:实现FileHandler接口的类与实现Document接口的类具有相同的工作方式,它传经根据由方法getDocument(File)传递给该实现类的文件扩展名来调用相应的分析器对不同的文档进行处理
2、
FileHandler接口
public interface FileHandler{
DocumentgetDocument(File file){
throws FileHandlerException;
}
}
3、
ExtensionFileHandler类实现了FileHandler接口。
public class ExtensionFileHandler implements FileHandler{
privateProperties handlerProps;
publicExtensionFileHandler(Proprops) throws IOException{
handlerProps=props;//映射文件扩展名
}
publicDocument getDocument(File file) throws FileHandlerException{
Document doc=null;
String name=file.getName();
int dotIndex=name.indexOf(".");
if((dotIndex>0)&&(dotIndex<name.length())){//提取文件扩展
String ext=name.substring(dotIndex+1,name.length());
StringhandlerClassName=handlerProps.getProperty(ext);//将文件传递给解析器实现
try{//查找解析器名称
Class handler handler=(DocumentHandler)handlerClass.newIntance();
return handler.getDocument(new FileInputStream(file));//
}
catch (ClassNotFoundExceptoin e){
thrownew FileHandlerException
("cannotcreate instanceof:"+handlerClassName,e);
}
catch (InstantiationExceptoin e){
thrownew FileHandlerException
("cannotcreate instanceof:"+handlerClassName,e);
}
catch (IllegalAccessExceptoin e){
thrownew FileHandlerException
("cannotcreate instanceof:"+handlerClassName,e);
}
catch (FileNotFoundExceptoin e){
thrownew FileHandlerException
("Filenotfound:"+file.getAsbsolutePath(),e);
}
catch (DocumentHandlerExceptoin e){
thrownew FileHandlerException
("Documentcannot behandler:"+file.getAsbsolutePath(),e);
}
}
return null;
}
public static void main(String[] args) throws Exception{
if (args.length<2) {
usage();
System.exit(0);
}
Properties props=new Properties();
props.load(newFileInputStream(args[0]));//装载属性文件
ExtensionFileHandler fileHandler=newExtensionFileHandler(props);
Documentdoc=fileHandler.getDocument(new File(args[1]));
}
privatestatic void usage(){
System.err.println("USAGE:java"+ExtensionFileHandler.class.getName()
+"/path/to/properties /path/to/document");
}
}
}
4、FileIndex把搜索组件连接在一起,递归地遍历文件系统目录并同时索引其中的所有文件。
public class FileIndexer{
protected FileHandler fileHandler;
publicFileIndexer(Properties props) throws IOException{
fileHandler=newExtensionFileHandler(props);//使用ExtensionFileHandler接口
}
public void index(IndexWriter writer,File file) throwsFileHandlerException{
//index方法
if (file.canRead()){ //递归遍历可读的目录
if (file.isDirectory()){
String[] files=file.list();
if (files!=null){
for (int i=0;i<files.length;i++){
index(writer,newFile(file,files[i]));
}
}
}
else{
System.out.println("Indexing"+file);//将文件传递给ExtensionFileHandler
try{
Docuement doc=fileHandler.getDocument(file);
if (doc!=null){
writer.addDocument(doc);//将返回的lucene文档增加到索引中
}
else{
System.err.println("cannothandler"+file.getAbsolutedPath()
+" ;skipping("+e.getMessage()+")");
}
}
}
}
publicstatic void main(String[] args) throws Exception{
if (args.length<3){
usage();
System.exit(0);
}
Properties props=new Properties();
props.load(new FileInputStream(args[0]));//读取命令行指定的属性文件
Directory dir=FSDirectory.getDirectory(args[2],true);
Analyzeranalyzer=new SimpleAnalyzer();
IndexWriter writer=new IndexWriter(dir,analyzer,true);//打开索引
FileIndexer indexer=new FleIndexer(props);//创建FileIndexer实例
long start=new Date().getTime();
indexer.index(writer,new File(args[1]));//首次调用index方法
writer.optimize();//优化索引:关闭索引写入器
writer.close();
long end=new Date().getTime();
System.out.println();
IndexReaderreader=IndexReader.open(dir);
//面向用户的摘要信息
System.out.println("Document indexed:"+reader.numDocs());
System.out.println("Totaltime:"+(end-start)+"ms");
reader.close();
}
privatestatic void usage(){
System.err.println("USAGE:java"+ExtensionFileHandler.class.getName()
+"/path/to/properties /path/to/document");
}
}
}
推荐阅读
-
微信小程序_文档_03_框架_视图层_WXML_数据绑定_列表渲染_事件处理
-
WinForm框架开发教程 - 多文档界面中的子窗口弹出、拖拽处理 WinFormdevexpressc#.net 6.0
-
JAVA中利用Docx4J组件操作word文档,进行docx格式文档的创建、写入、读取、转换html、图片处理示例、转换pdf
-
lucene-创建文档索引处理框架
-
lucene-索引纯文本文档
-
lucene-索引HTML文档
-
lucene-索引word文档
-
lucene-索引RTF文档
-
lucene-索引文档的删除、更新及增强加权
-
结合ADO、ADOX和MFC的文档/视图/框架架构创建和打开Access数据库