日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java搜索项目内的异常_java中用Lucene做搜索,在建索引时遇到的2个异常

發布時間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java搜索项目内的异常_java中用Lucene做搜索,在建索引时遇到的2个异常 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

版本信息:

jdk: 1.6

lucene: 3.2.0

情況是這樣的,現在項目用lucene做搜索,我在服務器上跑了個后臺線程用于建索引(每次最多從數據庫中取出2w條),隔10分鐘會跑一次,但是 隔一段時間就會拋出一些莫名其妙的異常,而且修復不了,導致我必須得把索引目錄下所有文件全部刪除,再重新建索引。這在數據大的情況下,是致命的啊(目前 有將近110w數據,如果重建,每10分鐘2w條數據,要9個小時)

有碰到過這個異常的大神們,可否為小弟指引一下,滴水之恩,必當涌泉相報!

我建索引的代碼部分:

private synchronized void createIndexMutil(List contentList) {

FSDirectory fsDir = null;

RAMDirectory ramDir = null;

IndexWriter indexWriter = null;

IndexWriter fsInedxWriter = null;

int commit_size = Config.INDEX_COMMIT_SIZE;

String indexPath = Config.INDEXPATH;

int count = 0;

int sum = 0;

try{

File indexDir = new File(indexPath);

if((!indexDir.exists()) || (!indexDir.isDirectory())){

indexDir.mkdirs();

}

fsDir = FSDirectory.open(indexDir);

LockFactory lfactory = new SimpleFSLockFactory();

fsDir.setLockFactory(lfactory);

Analyzer luceneAnalyzer = new PaodingAnalyzer();

fsInedxWriter = new IndexWriter(fsDir, luceneAnalyzer, IndexWriter.MaxFieldLength.LIMITED);

for(int i = 0; i < contentList.size(); i++){

ContentVo contentVo = (ContentVo)contentList.get(i);

if(!contentVo.getContentContent().equals("")){

if(count == 0){

ramDir = new RAMDirectory();

ramDir.setLockFactory(lfactory);

indexWriter = new IndexWriter(ramDir, luceneAnalyzer, IndexWriter.MaxFieldLength.LIMITED);

}

Document document = new Document();

Field f;

String s = contentVo.getContentContent().replaceAll("]+>","").replaceAll("?+"," ").replaceAll("\\s+"," ").replaceAll("&(\\w)+;", "");

document.add(new Field("taskid", contentVo.getTaskID(), Field.Store.YES, Field.Index.NOT_ANALYZED));

document.add(new Field("contentid", contentVo.getContentID(), Field.Store.YES, Field.Index.NOT_ANALYZED));

document.add(new Field("content",s,Field.Store.YES,Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));

indexWriter.addDocument(document);

log.info("[LUCENE THREAD]index created!taskid:"+ contentVo.getTaskID() +",contentid:" + contentVo.getContentID());

updateIsIndex(contentVo.getTaskID(), contentVo.getContentID(), 1, contentVo.getIndexType());

count ++;

sum ++;

if(count >= commit_size || i == contentList.size() - 1){

indexWriter.close();

fsInedxWriter.addIndexes(ramDir);

count = 0;

}

}else{

log.info("[LUCENE THREAD]content is empty!taskid:"+ contentVo.getTaskID() +",contentid:" + contentVo.getContentID());

updateIsIndex(contentVo.getTaskID(), contentVo.getContentID(), 2, contentVo.getIndexType());

}

}

fsInedxWriter.optimize();

log.info("[LUCENE THREAD]append " + sum + ":" + " document!");

}catch(Exception ex){

log.error("操作異常", ex);

}finally{

if(fsInedxWriter != null){

try {

fsInedxWriter.close();

} catch (Exception e) {

log.error("操作異常", e);

}

fsInedxWriter = null;

}

if(indexWriter != null){

try {

indexWriter.close();

} catch (Exception e) {

log.error("操作異常", e);

}

indexWriter = null;

}

}

}

異常堆棧信息:

異常1:

java.io.IOException: background merge hit exception: _4(3.2):C19999 _5(3.2):Cv5000 _6(3.2):Cv5000 _7(3.2):Cv5000 _8(3.2):Cv5000 into _9 [optimize]

at org.apache.lucene.index.IndexWriter.optimize(IndexWriter.java:2536)

at org.apache.lucene.index.IndexWriter.optimize(IndexWriter.java:2474)

at org.apache.lucene.index.IndexWriter.optimize(IndexWriter.java:2444)

at com.paic.rsms_case.biz.LuceneService.createIndexMutil(LuceneService.java:138)

at com.paic.rsms_case.biz.LuceneService.createNoIndexed(LuceneService.java:84)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:296)

at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:177)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)

at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)

at $Proxy0.createNoIndexed(Unknown Source)

at com.paic.rsms_case.biz.ThreadService.run(ThreadService.java:59)

Caused by: java.io.IOException: Stale NFS file handle

at java.io.RandomAccessFile.close0(Native Method)

at java.io.RandomAccessFile.close(RandomAccessFile.java:543)

at org.apache.lucene.store.FSDirectory$FSIndexOutput.close(FSDirectory.java:493)

at org.apache.lucene.util.IOUtils.closeSafely(IOUtils.java:80)

at org.apache.lucene.index.FieldsWriter.close(FieldsWriter.java:127)

at org.apache.lucene.index.SegmentMerger.mergeFields(SegmentMerger.java:250)

at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:106)

at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4194)

at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:3837)

at org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:388)

at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:456)

異常2:

java.io.FileNotFoundException: /nfsc/ifbsm_rsms_220017_vol1/casefile/indexfile/_8e.cfs (No such file or directory)

at java.io.RandomAccessFile.open(Native Method)

at java.io.RandomAccessFile.(RandomAccessFile.java:212)

at org.apache.lucene.store.SimpleFSDirectory$SimpleFSIndexInput$Descriptor.(SimpleFSDirectory.java:69)

at org.apache.lucene.store.SimpleFSDirectory$SimpleFSIndexInput.(SimpleFSDirectory.java:90)

at org.apache.lucene.store.NIOFSDirectory$NIOFSIndexInput.(NIOFSDirectory.java:91)

at org.apache.lucene.store.NIOFSDirectory.openInput(NIOFSDirectory.java:78)

at org.apache.lucene.index.CompoundFileReader.(CompoundFileReader.java:66)

at org.apache.lucene.index.CompoundFileReader.(CompoundFileReader.java:55)

at org.apache.lucene.index.IndexWriter.getFieldInfos(IndexWriter.java:1210)

at org.apache.lucene.index.IndexWriter.getCurrentFieldInfos(IndexWriter.java:1230)

at org.apache.lucene.index.IndexWriter.(IndexWriter.java:1166)

at org.apache.lucene.index.IndexWriter.(IndexWriter.java:958)

at com.paic.rsms_case.biz.LuceneService.createIndexMutil(LuceneService.java:106)

at com.paic.rsms_case.biz.LuceneService.createNoIndexed(LuceneService.java:84)

at sun.reflect.GeneratedMethodAccessor398.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:296)

at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:177)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)

at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)

at $Proxy0.createNoIndexed(Unknown Source)

at com.paic.rsms_case.biz.ThreadService.run(ThreadService.java:59)

拋出異常1的方法行代碼是:fsInedxWriter.optimize();

拋出異常2的方法行代碼是:fsInedxWriter = new IndexWriter(fsDir, luceneAnalyzer, IndexWriter.MaxFieldLength.LIMITED);

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的java搜索项目内的异常_java中用Lucene做搜索,在建索引时遇到的2个异常的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。