2014-03-24 424 views
0

我的Lucene索引 - 使用Lucene4.1用Solr構建 - 我認爲是損壞的。在嘗試使用下面的代碼讀取索引我得到org.apache.solr.common.SolrException: No such core: collection1例外:修復lucene 4.1 /索引損壞的索引

File configFile = new File(cacheFolder + File.separator + "solr.xml"); 
CoreContainer container = new CoreContainer(cacheFolder, configFile); 
SolrServer server = new EmbeddedSolrServer(container, "collection1"); 
ModifiableSolrParams params = new ModifiableSolrParams(); 
params.set("q", idFieldName + ":" + ClientUtils.escapeQueryChars(queryId)); 
params.set("fl",idFieldName+","+valueFieldName); 

QueryResponse response = server.query(params) 

我用「checkindex」 UTIL來檢查索引的完整性,它似乎無法通過拋出來執行任務以下錯誤:

Opening index @ /....../solrindex_cache/zookeeper/solr/collection1/data/index 

ERROR: could not read any segments file in directory 
java.io.FileNotFoundException: /....../solrindex_cache/zookeeper/solr/collection1/data/index/segments_b5tb (No such file or directory) 
    at java.io.RandomAccessFile.open(Native Method) 
    at java.io.RandomAccessFile.<init>(RandomAccessFile.java:233) 
    at org.apache.lucene.store.MMapDirectory.openInput(MMapDirectory.java:223) 
    at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:285) 
    at org.apache.lucene.index.SegmentInfos$1.doBody(SegmentInfos.java:347) 
    at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:783) 
    at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:630) 
    at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:343) 
    at org.apache.lucene.index.CheckIndex.checkIndex(CheckIndex.java:383) 
    at org.apache.lucene.index.CheckIndex.main(CheckIndex.java:1777) 

文件segments_b5tb該索引檢查正在尋找在索引文件夾確實丟失。唯一類似的文件是segments.gen

有什麼辦法診斷出了什麼問題,如果可能的話,通過各種手段來解決它,因爲它花了我2個星期建立這個指數...

許多許多感謝您友好的建議!

+0

ADD:通過搞亂它,我認爲它會變得更糟:由於索引可能已損壞,當我再次測試時,它似乎重新創建了「segment.gen」文件,並且還重新創建了這些段文件(即si,tip,doc,fdx等文件)。然後我立即退出該程序,以避免所有文件丟失。但是現在看起來索引與這些段文件是完全分開的,即使它們在物理上存在。我想這更加複雜,但是有什麼辦法可以解決這個問題嗎? – Ziqi

+0

您是否嘗試運行[fixIndex](http://lucene.apache.org/core/4_7_0/core/org/apache/lucene/index/CheckIndex.html#fixIndex%28org.apache.lucene.index.CheckIndex .Status%29)CheckIndex的方法? – cheffe

回答

1

如果segments.gen文件是只有文件,您可能不幸運,但除此之外,您可以嘗試使用CheckIndex檢查錯誤並修復索引。由於該工具通過刪除有問題的細分來修復索引,因此可能會導致一些丟失的數據。

+0

謝謝。不,有segments.gen,還有很多其他的「si,tip,doc,fdx」文件。但CheckIndex抱怨的文件缺失,即「segments_b5tb」,因此CheckIndex無法繼續,但會拋出上述錯誤消息並退出。 – Ziqi