2011-02-13 61 views
0

我已經提交了類似的問題,打開的文檔,但我已經分解的問題最簡單的形式,所以我要再次後它:SolrJ addFile保持

的問題是,SolrJ似乎保持文件句柄打開,如果我多次添加同一個文件。

我用下面的方法來提交一個文件到Solr:

public boolean addDocument(File doc) throws IOException, SolrServerException { 

    ContentStreamUpdateRequest csur = new ContentStreamUpdateRequest("/update/extract"); 

    csur.addFile(doc); 
    csur.setParam("literal.id", Utils.getAbsolutePath(doc)); 
    csur.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true); 
    NamedList<Object> result = this.solr.request(csur); 


    return result != null; 
} 

而且這個方法來刪除文件:

public void removeDocument(File doc) throws IOException, 
     SolrServerException { 

    this.solr.deleteById(Utils.getAbsolutePath(doc)); 
    this.solr.commit(); 
} 

,但似乎留下一些文件句柄揮之不去:

以下代碼片段演示了此問題:

File doc = new File("../../testpdf/bbb.pdf"); 
solr.addDocument(doc); 
//solr.removeDocument(doc); // Without these 2 lines, all handles 
//solr.addDocument(doc);  // are released correctly 

如果我兩次添加相同的文檔,SolrJ以某種方式保持句柄處於活動狀態,並且添加的文檔不能被其他進程修改。

我已經打過電話使用csur.addContentStream()而不是在addDocumentcsur.addFile(),然後關閉添加流的底層流和Reader,沒有效果。

THX的任何建議提前

+0

你確定它是Solr而不是Jnotify?看看誰在打開文件。這將是一個好開始 – maximdim 2011-02-12 20:30:05

回答

0

無法修復它,通過編寫一個緩衝文件自定義ContentStream做了一個解決方法。