小编典典

SolrJ addFile使文档保持打开状态

java

我已经提交了类似的问题,但已将问题分解为最简单的形式,因此我将其再次发布:

问题是,如果我多次添加同一文件,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,但没有任何效果。

提前提出任何建议


阅读 223

收藏
2020-11-30

共1个答案

小编典典

无法解决此问题,而是通过编写可缓冲文档的自定义ContentStream进行了变通。

2020-11-30