2011-02-13 47 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做了一个解决方法。