0

すでに同様の質問を送信しましたが、問題を最も単純な形式に分解したので、もう一度投稿します。

問題は、同じファイルを複数回追加すると、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

4

1 に答える 1

0

修正できませんでした。ドキュメントをバッファリングするカスタムContentStreamを作成して回避策を実行しました。

于 2011-05-25T20:24:09.807 に答える