索引文件已经生成了,现在是在索引的基础上增加索引,总是报错,不知道问题出在什么地方了,跪求高手们帮帮忙啦!!异常是:
org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: SimpleFSLock@D:\dataindex\write.lock
at org.apache.lucene.store.Lock.obtain(Lock.java:85)
at org.apache.lucene.index.DirectoryIndexReader.acquireWriteLock(DirectoryIndexReader.java:303)
at org.apache.lucene.index.IndexReader.deleteDocument(IndexReader.java:837)
at org.apache.lucene.index.IndexReader.deleteDocuments(IndexReader.java:873)
at lucene.LuceneIndexDatabase.DeleteIndexFiled(LuceneIndexDatabase.java:179)
at lucene.LuceneIndexDatabase.DbIndexBuilder(LuceneIndexDatabase.java:80)
at lucene.LuceneIndexDatabase.main(LuceneIndexDatabase.java:59)
代码如下:
public class LuceneIndexDatabase {
private static String Index_Path = "d:\\dataindex";
private static Connection conn= null;
private static Statement st = null;
private static ResultSet re = null;
private static IndexWriter RAMWriter = null;
private static boolean indexexist  = indexExist(Index_Path);

public static void main(String args[]){

try {
File indexpath = new File(Index_Path);
IndexWriter Writer = null;
if(indexexist) 
            {
Writer = new IndexWriter(indexpath,new StandardAnalyzer(),false);
}
            else
            {
             Writer = new IndexWriter(indexpath,new StandardAnalyzer(),true);
            }
getGetConn("home",name,password);
re = getResultSet("select * from sdataclass where sdc_id> 1100");
DbIndexBuilder(Writer);
Writer.optimize();
Writer.close();
System.out.println("索引成功 ");
} catch (Exception e) {  
e.printStackTrace();
}
} private static void DbIndexBuilder(IndexWriter indexwriter) throws SQLException, CorruptIndexException, LockObtainFailedException, IOException, ParseException {
Date startDate=new Date();
        System.out.println("检索开始时间:"+startDate);
        System.out.println("正在索引,请稍等...........");
        Analyzer TextIKAnalyzer = new IK_CAnalyzer();
while(re.next()){
Directory ramdirectory = new RAMDirectory();
System.out.println("sdc_id===="+re.getString("sdc_id"));

if(indexexist) 
            {
RAMWriter = new IndexWriter(ramdirectory,TextIKAnalyzer,true);
ramdirectory.clearLock(IndexWriter.WRITE_LOCK_NAME);
DeleteIndexFiled(re.getString("sdc_id"));
            }
            else
            {
             RAMWriter = new IndexWriter(ramdirectory,TextIKAnalyzer,true);
            } Document document = new Document();

Field sdc_id = new Field("sdc_id",re.getString(1),Field.Store.YES,Field.Index.UN_TOKENIZED);
Field sdc_name = new Field("sdc_name",re.getString(2),Field.Store.YES,Field.Index.TOKENIZED);
Field sdc_pid = new Field("sdc_pid",re.getString(3),Field.Store.YES,Field.Index.UN_TOKENIZED);
//TokenStream stream = TextIKAnalyzer.tokenStream("sdc_name", new StringReader(re.getString(2)));

System.out.println();
document.add(sdc_id);
document.add(sdc_name);
document.add(sdc_pid);

RAMWriter.addDocument(document);
RAMWriter.optimize();
RAMWriter.close();
indexwriter.addIndexes(new Directory[]{ramdirectory});

}
java.util.Date endDate=new java.util.Date();
       
        System.out.println("索引结束时间:"+endDate);
        System.out.println("共花费:"+(endDate.getTime()-startDate.getTime())+"ms");
} private static ResultSet getResultSet(String sql) {
try {
Statement stat = conn.createStatement();
ResultSet result = stat.executeQuery(sql);
return result;
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.print(e);
}
return null;
} private static void getGetConn(String dbname, String user, String password) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String url = "jdbc:oracle:thin:@localhost:1521:home";

try {
conn = DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

private static String clobString(Clob clob){
String value="";
                String line="";
                if(clob!=null)
{
    Reader reader;
try {
reader = ((oracle.sql.CLOB)clob).getCharacterStream();
BufferedReader br=new BufferedReader(reader);
        while((line=br.readLine())!=null)
 {
         if(line.length()>200){
         value+=line.substring(0, 200)+"\r\n";
         }else {
         value+=line+"\r\n";
         }
     
 }
        br.close();
        reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}  
return value;
}

public static void DeleteIndexFiled(String id) throws CorruptIndexException, IOException{
IndexReader reader = IndexReader.open(Index_Path);
Term terms = new Term("sdc_id",id);//删除id为id的那个doc
      reader.deleteDocuments(terms);              !!!!!!!!!!!!!!这里报错!!!!!!!!!!!!!         reader.close();
} public static boolean indexExist(String indexDir)
        {
            return IndexReader.indexExists(indexDir);
        }
}