Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SolrJ addFile使文档保持打开状态_Java_Solrj_Solr - Fatal编程技术网

Java SolrJ addFile使文档保持打开状态

Java SolrJ addFile使文档保持打开状态,java,solrj,solr,Java,Solrj,Solr,我已经提交了一个类似的问题,但我已经将问题分解为最简单的形式,所以我将再次发布: 问题是,如果我多次添加同一个文件,SolrJ似乎会保持文件句柄打开 我使用以下方法向Solr提交文档: public boolean addDocument( File doc ) throws IOException, SolrServerException { ContentStreamUpdateRequest csur = new ContentStreamUpdateRequest( "/upd

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

问题是,如果我多次添加同一个文件,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;
}
但这似乎会留下一些文件句柄:

以下代码段演示了该问题:

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