Java SolrJ addFile使文档保持打开状态
我已经提交了一个类似的问题,但我已经将问题分解为最简单的形式,所以我将再次发布: 问题是,如果我多次添加同一个文件,SolrJ似乎会保持文件句柄打开 我使用以下方法向Solr提交文档:Java SolrJ addFile使文档保持打开状态,java,solrj,solr,Java,Solrj,Solr,我已经提交了一个类似的问题,但我已经将问题分解为最简单的形式,所以我将再次发布: 问题是,如果我多次添加同一个文件,SolrJ似乎会保持文件句柄打开 我使用以下方法向Solr提交文档: public boolean addDocument( File doc ) throws IOException, SolrServerException { ContentStreamUpdateRequest csur = new ContentStreamUpdateRequest( "/upd
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;
}
但这似乎会留下一些文件句柄:
以下代码段演示了该问题:
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会以某种方式保持句柄的活动状态,并且添加的文档不能被任何其他进程修改
我已经尝试在addDocument
中使用csur.addContentStream()
而不是csur.addFile()
调用,然后关闭基础流和添加流的读取器,但没有效果
thx对于任何提前提出的建议无法解决此问题,通过编写缓冲文档的自定义内容流进行了变通。您确定它是Solr而不是Jnotify本身吗?看看是谁打开了文件。这将是一个很好的开端我相当肯定这是Solr。我现在又测试了一点,这种行为很奇怪。有时,文件在初始扫描后也会保持锁定状态。可能是因为SolrJ做了一些延迟加载的事情。kk,这肯定是SolrJ指定的东西。除了对同一文档的
addDocument
的两个调用之外,我已经删除了所有内容。在第一次调用之后,文件句柄被释放,但是当我执行第二次调用时,句柄保持不变。您使用的是embeddedSolrServer吗?
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