当前位置: 首页 > 面试题库 >

SolrJ addFile使文档保持打开状态

韩禄
2023-03-14
问题内容

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

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

提前提出任何建议


问题答案:

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



 类似资料:
  • 我正在创建一个URLClassloader来加载一些JAR。每个jar从不同的classloader中正确加载,每个jar包含一个具有run()方法的类。现在这个run()的主体可以在其中创建一个匿名的内部类。但是,因为我在try-with-resources块中创建了我的URLClassloader,所以它会自动关闭,并且在运行时,当它试图加载匿名内部类时,它会抛出一个NoClassDefFou

  • 问题内容: 如果您读取整个文件时,文件句柄是否一直打开直到脚本退出?有没有更简洁的方法来读取整个文件? 问题答案: 这个问题的答案在某种程度上取决于特定的Python实现。 要了解所有内容,请特别注意实际对象。在您的代码中,该对象仅在表达式中被提及一次,并且在调用返回后立即变得不可访问。 这意味着文件对象是垃圾。剩下的唯一问题是“垃圾收集器何时收集文件对象?”。 在使用引用计数器的CPython中

  • 问题内容: 我可能是个白痴,但是如何在jQueryUI的手风琴中打开多个部分?演示一次只能打开一个……我正在寻找一个可折叠的菜单类型系统。 问题答案: 这原本是讨论中[的手风琴jQuery用户界面文档: 注意:如果要一次打开多个部分,请不要使用手风琴 手风琴不允许同时打开一个以上的内容面板,为此需要付出很多努力。如果您正在寻找一个可以打开多个内容面板的小部件,请不要使用它。通常它可以用几行jQue

  • HTTP协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态 客户端与服务器端的一次通信,就是一次会话 实现状态保持的方式:在客户端或服务器端存储与会话有关的数据 存储方式包括cookie、session,会话一般指session对象 使用cookie,所有数据存储在客户端,注意不要存储敏感信息 推荐使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储sessio

  • 我有一个这样的bat文件: 这会将IP信息打印到屏幕上,但在用户可以读取该信息之前,CMD会自动关闭。 我相信CMD假设脚本已经完成,所以它关闭了。 脚本完成后如何保持CMD打开?

  • 问题内容: 如果下拉菜单可见,并且我在下拉菜单外部单击,它将关闭。我需要它不关闭。 从文档中: 打开后,该插件还会添加 .dropdown-backdrop 作为单击区域,以在菜单外单击时关闭下拉菜单。 我可以添加什么JavaScript以防止下拉列表关闭? 问题答案: 从_Bootstrap_文档的事件部分: :调用hide实例方法后,立即触发此事件。 对于初学者来说,为了防止下拉菜单关闭,我们