我已经提交了类似的问题,但已将问题分解为最简单的形式,因此我将其再次发布:
问题是,如果我多次添加同一文件,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会以某种方式使这些句柄保持活动状态,并且添加的文档无法被任何其他进程修改。
我已经尝试调用using csur.addContentStream()而不是csur.addFile()in addDocument,然后关闭添加的流的基础Stream和Reader,但没有任何效果。
csur.addContentStream()
csur.addFile()
addDocument
提前提出任何建议
无法解决此问题,而是通过编写可缓冲文档的自定义ContentStream进行了变通。