すでに同様の質問を送信しましたが、問題を最も単純な形式に分解したので、もう一度投稿します。
問題は、同じファイルを複数回追加すると、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
同じドキュメントを2回追加すると、SolrJはどういうわけかハンドルを存続させ、追加されたドキュメントを他のプロセスで変更することはできません。
csur.addContentStream()
での代わりにcsur.addFile()
を使用して呼び出してaddDocument
から、追加されたストリームの基になるストリームとリーダーを閉じてみましたが、効果はありません。
事前の提案のためのthx