package com.geostar.poi.support.lucene; |
|
import java.io.File; |
import java.io.IOException; |
|
import org.apache.log4j.Logger; |
import org.apache.lucene.analysis.Analyzer; |
import org.apache.lucene.analysis.standard.StandardAnalyzer; |
import org.apache.lucene.index.CorruptIndexException; |
import org.apache.lucene.index.IndexReader; |
import org.apache.lucene.index.IndexWriter; |
import org.apache.lucene.index.IndexWriter.MaxFieldLength; |
import org.apache.lucene.store.FSDirectory; |
import org.apache.lucene.store.LockObtainFailedException; |
import org.apache.lucene.util.Version; |
|
import com.geostar.poi.support.POIConfig; |
|
public class POILuceneManager implements LuceneManager{ |
private IndexWriter indexWriter= null ; |
private IndexReader indexReader= null ; |
//------lock 1 |
private Object lock_w= new Object(); |
//------lock 2 |
private Object lock_r= new Object(); |
|
private Logger logger=Logger.getLogger(POILuceneManager. class ); |
@Override |
public IndexWriter getIndexWriter() throws CorruptIndexException, LockObtainFailedException, IOException { |
synchronized (lock_w){ |
if (indexWriter== null ){ |
System.out.println( "创建对象" ); |
if (IndexWriter.isLocked(FSDirectory.open( new File(POIConfig.DEFULT_POI_LUCENNE_INDEX_PATH)))){ |
IndexWriter.unlock(FSDirectory.open( new File(POIConfig.DEFULT_POI_LUCENNE_INDEX_PATH))); |
}; |
Analyzer any= new StandardAnalyzer(Version.LUCENE_CURRENT); |
indexWriter= new IndexWriter(FSDirectory.open( new File(POIConfig.DEFULT_POI_LUCENNE_INDEX_PATH)),any,MaxFieldLength.UNLIMITED ); |
}; |
|
} |
return indexWriter; |
} |
|
@Override |
public IndexReader getIndexReader() throws CorruptIndexException, IOException { |
synchronized (lock_r) { |
if (indexReader== null ){ |
indexReader=IndexReader.open(FSDirectory.open( new File(POIConfig.DEFULT_POI_LUCENNE_INDEX_PATH))); |
}; |
} |
return indexReader; |
} |
|
@Override |
public void closeIndexWriter() throws IOException { |
// TODO Auto-generated method stub |
//synchronized (lock_w) { |
if ( this .indexWriter!= null ){ |
this .indexWriter.close(); |
}; |
//} |
|
} |
|
@Override |
public void closeIndexReader() throws IOException { |
// TODO Auto-generated method stub |
//synchronized (lock_r) { |
if ( this .indexReader!= null ){ |
this .indexReader.close(); |
}; |
//} |
|
|
} |
|
@Override |
public void closeAll() throws IOException { |
// TODO Auto-generated method stub |
this .closeIndexReader(); |
this .closeIndexWriter(); |
|
} |
|
} |