SolrJ addFile保持
问题描述:
我已经提交了类似的问题,打开的文档,但我已经分解的问题最简单的形式,所以我要再次后它:SolrJ addFile保持
的问题是,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()
而不是在addDocument
csur.addFile()
,然后关闭添加流的底层流和Reader,没有效果。
THX的任何建议提前
答
无法修复它,通过编写一个缓冲文件自定义ContentStream做了一个解决方法。
你确定它是Solr而不是Jnotify?看看谁在打开文件。这将是一个好开始 – maximdim 2011-02-12 20:30:05