SolrJ addFile使文档保持打开状态

时间:2011-02-13 13:08:35

标签: java solrj solr

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

问题是,如果我多次添加同一个文件,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进行呼叫,然后关闭添加的流的基础流和读取器,但不起作用。

预先提出任何建议

1 个答案:

答案 0 :(得分:0)

无法修复它,通过编写缓冲文档的自定义ContentStream来做一个解决方法。