我已经提交了类似的问题,但我已将问题分解为最简单的形式,所以我要再次发布:
问题是,如果我多次添加同一个文件,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()
中使用csur.addFile()
而不是addDocument
进行呼叫,然后关闭添加的流的基础流和读取器,但不起作用。
预先提出任何建议
答案 0 :(得分:0)
无法修复它,通过编写缓冲文档的自定义ContentStream来做一个解决方法。