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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

no segments* file found in SimpleFSDirectory问题总结

發布時間:2024/8/23 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 no segments* file found in SimpleFSDirectory问题总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

lucene6.0版本

場景一:第一次啟動程序索引庫為空拋出異常

最近在寫lucene發現利用lucene6.0版本時候如果索引庫為空構建indexWriter,代碼如下:

IndexWrterConfig config = new IndexWriterConfig(analyzer); IndexWriter indexWriter = new IndexWriter(config); IndexReader reader = IndexReader.open(directory);

程序順序執行上面代碼塊是正常的,但是調用iIndexReader reader = IndexReader.open(directory);?后報錯“no segments* file”。

解決辦法:在獲取indexWriter對象后手動commit一次建立索引庫版本信息,最終問題解決!代碼如下:

IndexWrterConfig config = new IndexWriterConfig(analyzer); IndexWriter indexWriter = new IndexWriter(config); indexWriter.commit();//手動提交一次 IndexReader reader = IndexReader.open(directory);

場景二:提交文檔并提交以后再次啟動拋出異常

異常原因:可能是文件讀寫異常終止以后,程序再次啟動時候,lucene對索引庫進行合并讀取操作,信息缺失,索引庫讀取和合并操作失敗。

解決辦法:在indexWriter.commit()后沒有調用indexWriter.close()方法,此時文檔內容為空

場景三:程序異常終止(手動殺死進程,造成索引庫未寫入全)

解決辦法:可以用如下代碼修復索引,會幫你刪除損壞的索引文件

/*** @param source 索引源* @param dest 索引目標* @param indexWriterConfig 配置相關*/ public static void recoveryIndex(String source, String dest, IndexWriterConfig indexWriterConfig) {IndexWriter indexWriter = null;try {indexWriter = new IndexWriter(FSDirectory.open(Paths.get(dest)), indexWriterConfig);} catch (IOException e) {log.error("", e);} finally {//說明IndexWriter正常打開了,無需恢復if (indexWriter != null && indexWriter.isOpen()) {try {indexWriter.close();} catch (IOException e) {log.error("", e);}} else {//說明IndexWriter已經無法打開,使用備份恢復索引//此處簡單操作,先清空損壞的索引文件目錄,如果索引特別大,可以比對每個文件,不必全部刪除 try {FileUtils.deleteDirectory(new File(dest));FileUtils.copyDirectory(new File(source), new File(dest));} catch(IOException e){log.error("", e);//使用備份恢復出錯,那么就使用最后一招修復索引log.info("Check index {} now!", dest);try {IndexUtils.checkIndex(dest);} catch (IOException | InterruptedException e1) {log.error("Check index error!", e1);}}} }

lucene8.2版本

場景一:第一次啟動程序索引庫為空拋出異常

第一次啟動索引庫未空的程序,程序拋出異常代碼如下:

IndexWriterConfig writerConfig = new IndexWriterConfig(analyzer);IndexWriter indexWriter = new IndexWriter(dic,writerConfig);

解決方法:直接在IndexWriterConfig參數中配置索引庫不存在時候創建即可,代碼如下:

IndexWriterConfig writerConfig = new IndexWriterConfig(analyzer);writerConfig.setOpenMode(OpenMode.CREATE_OR_APPEND);//解決IndexWriter indexWriter = new IndexWriter(dic,writerConfig);IndexReader reader = DirectoryReader.open(dic);

說明:查詢了http://lucene.apache.org/core/8_2_0/core/index.html文檔,發現OpenMode有以下三個參數:

APPEND索引庫版本信息(索引庫是否為空)存在則追加操作
CREATE不管索引版本信息是否存在重新創建索引庫
CREATE_OR_APPEND如果索引庫存在進行追加,不存在會自動創建

參考博客:

  • https://blog.csdn.net/jinwufeiyang/article/details/51817822
  • https://blog.csdn.net/P397226804/article/details/69396370
  • http://codepub.cn/2016/06/24/Lucene-6-0-in-action-the-index-of-hot-backup-and-recovery/? (該博主是阿里大牛,想學lucene可以看它文章,受益匪淺)
  • 總結

    以上是生活随笔為你收集整理的no segments* file found in SimpleFSDirectory问题总结的全部內容,希望文章能夠幫你解決所遇到的問題。

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