1,使用indexreader創建indexsearcher. 2,indexsearcher在使用完了以后不要關閉. 3.使用indexreader.isCurrent()判斷索引是否被indexwriter改動. 4,如果索引被改動,indexsearcher.close()先前那個,然后new indexsearcher(indexreader).
傳string給searcher,searcher會維護一個內部的reader,當本次搜索結束后reader會被關掉.如果使用reader構造,reader在本次搜索結束后不會被關掉,除非你自己調用reader.close();所以用reader去構造searcher,然后通過searcher.getIndexReader()獲取當前的reader,用reader.iscurrent()判斷索引文件是否變化了,如果索引文件已經更改,則把當前的searcher關閉,然后再利用reader.reopen()方法獲取新的reader,再創建一個searcher,像這樣,new IndexSearcher(reader.reopen());
代碼:
?一、indexSearcher=new IndexSearcher(IndexReader.open(indexPath));
二、/* ??? * 先獲取reader,如果索引文件已經變化,關閉當前indexSearcher,然后以重新獲取的indexReader ??? * 作為參數new一個新的indexSearcher實例 ??? */ ??? IndexReader indexReader=indexSearcher.getIndexReader();//獲取當前的indexReader ??? if(!indexReader.isCurrent()){//判斷是否有索引更新 ????? ????? // 如果有索引更新,先關閉當前的indexSearcher ???? indexSearcher.close(); ???? //利用indexReader.reopen()獲取新的indexReader,并作為IndexSearcher的參數創建一個新的indexSearcher ???? indexSearcher=new IndexSearcher(indexReader.reopen()); ??? }