欢迎来到天天文库
浏览记录
ID:49160919
大小:122.30 KB
页数:11页
时间:2020-02-29
《Lucene代码分析.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1.Lucene源代码分析[1]首先讲一下Lucene的发音是Loo-seen,这是LuceneinAction中提到过的。另外强调的一点是我用的版本是1.9版,大家看到这里不要惊讶,我用这么早的版本,是为了能更好的了解Lucene的核心。如果有人看过最新的版本就应该了解,对于一个初学者,Lucene最高版本并不那么简单,它涉及了多线程,设计模式,对我反正是很挑战了。我先看老版本这也是受《LINUX内核完全注释》作者赵炯的启发,他分析的不是最新的Linux内核,而是1.11的版本。我开始还是用调试的方式来解释,我想大家和我一样,如果看了半天analyzer也会有点不耐烦,我先写一个什
2、么意义都没有例子(有那么一点意义的例子,网上很多):packageforfun; importorg.apache.lucene.analysis.SimpleAnalyzer;importorg.apache.lucene.index.IndexWriter; publicclassTest{publicstaticvoidmain(String[]args)throwsException{IndexWriterwriter=newIndexWriter("E:\a\",newSimpleAnalyzer(),true);}}IndexWriter是最核心的一个类,一般的Blo
3、gger把其它所有的包都分析完了,就剩这最核心的一个包的时候,就分析不动了。我们先看一下它的参数,第一个就是索引存放的路径,第二个参数是一个Analyzer对象,它对输入数据进行过滤,分词等,第三个参数如果为true,那么它删除原目录内的所有内容重建索引,如果为false,就在已经存在的索引上追加新的内容。你可以先运行一下,就会发现指定的目录下有一个segments文件。调试的时候,暂时不去管SimpleAnalyzer类。我们看一下IndexWriter类的构造函数:publicIndexWriter(Stringpath,Analyzera,booleancreate)throw
4、sIOException{this(FSDirectory.getDirectory(path,create),a,create,true);}这里我们看到一个新的类FSDirectory:publicstaticFSDirectorygetDirectory(Stringpath,booleancreate)throwsIOException{returngetDirectory(newFile(path),create);}再看getDirectory函数:publicstaticFSDirectorygetDirectory(Filefile,booleancreate)thr
5、owsIOException{file=newFile(file.getCanonicalPath());FSDirectorydir;synchronized(DIRECTORIES){dir=(FSDirectory)DIRECTORIES.get(file);if(dir==null){try{dir=(FSDirectory)IMPL.newInstance();}catch(Exceptione){thrownewRuntimeException("cannotloadFSDirectoryclass:"+e.toString());}dir.init(file,creat
6、e);DIRECTORIES.put(file,dir);}elseif(create){dir.create();}}synchronized(dir){dir.refCount++;}returndir;}DIRECTORIES是一个Hashtable对象,DIRECTORIES注释上讲,目录的缓存,保证唯一的路径和Directory对应,所以在Directory上同步可以对读写进行同步访问。(ThiscacheofdirectoriesensuresthatthereisauniqueDirectoryinstanceperpath,sothatsynchronizationo
7、ntheDirectorycanbeusedtosynchronizeaccessbetweenreadersandwriters.)也懒得解释了,就是创建一下目录,最后将refCount++。我们回过头来看IndexWriter的构造函数:privateIndexWriter(Directoryd,Analyzera,finalbooleancreate,booleancloseDir)throwsIOException{this.closeDir=cl
此文档下载收益归作者所有