次の Groovy コードを使用して、MongoDB に保存されているファイルを読み込み、Solr でインデックスを作成しています。(ファイルの内容とファイル名を含むファイル オブジェクトを既に作成しています):
ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/update/extract")
def tempFile = new File("temp/temp-${file.name}")
tempFile.append(file.file) //file.file references the byte[] of the file
//append call writes the file to disk
up.addFile(tempFile, "application/octet-stream")
up.setParam("literal.id", file.id.toString())
up.setParam("literal.name", "ConsultantFile")
up.setParam("literal.fileName_s", file.name)
up.setParam("literal.creator_s", file.createdBy?.lastFirstName)
up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true)
server.request(up) //server object is the shared handle to the Solr instance
tempFile.delete()
したがって、ファイルのバイト配列は既にありますが、addFile メソッドを使用できるようにディスクに書き込んでいます。次に、クリーンアップとして、ディスク上のファイルを削除します。それは動作しますが、それはばかげています。
up.addFile() の代わりに次のコードを試しましたが、「non ok status:500 message:Server Error」がスローされます。
def stringFile = new String(file.file, "UTF-8")
def stream = new ContentStreamBase.StringStream(stringFile)
up.addContentStream(stream)
中間ステップとしてディスクに書き込むことなく、既にメモリにあるファイルにインデックスを付ける最良の方法は何ですか?