2017-09-04 13 views
0

同じSolr IDに対して複数のpdfファイルを索引付けしたいと考えています。私たちのプロジェクトの一つは、我々はこのように表現するいくつかのオブジェクトを持っている: 複数のバイナリファイルを一意のsolrDocumentに索引付けする

{"id"  : "object:1234", 
"authors" : ["me", "you", ...], 
"keywords": ["key1", "key3", ...], 
"files" : [ 
    "/tmp/file1.pdf", 
    "/tmp/file2.pdf", 
    "/tmp/file3.pdf" 
] 
} 

は、我々は最初のプロセスを作成するために、すぐに私たちのSolr6サーバーへのインデックスの基本的なメタデータ(すべてのフィールドは、「ファイル」を期待します)。 これで、同じIDのすべてのファイルコンテンツをSolrにインデックスするプロセスが必要です。

{"id":"object:1234", 
"keywords":["key1", "key2"], 
"authors": ["me", "you"], 
"last_modified":"2017-09-04T12:00:00.000Z", 
"_version_":1577256778756784128 
} 

をそして、私の第二のプロセスの終わりに、私は私のsolrDocumentは次のようになりよりたい:

だから、最初のプロセス(このプロセスはすでに動作します)このSolrのドキュメントを作成します

{"id":"object:1234", 
"keywords":["key1", "key2"], 
"authors": ["me", "you"], 
"last_modified":"2017-09-04T13:00:00.000Z", 
"content":["content_of_file1", "content_of_file2", ...], 
"files":["/tmp/file1.pdf", "/tmp/file2.pdf", ...], 
"_version_":1577256778756784129 
} 

Solrハンドラを使用して簡単に行うことはできますか?
私が見つけた唯一の解決策は、ファイル内容を抽出するためにTikaを呼び出すPythonスクリプトを作成し、Solrドキュメント「parts of document update」を使用してSolrドキュメントを完成させることです。しかし、この解決法はあまりエレガントではありません。大容量のファイルではうまく機能しません。

あなたの問題を解決するためのより良い解決策がありますか?
ご協力いただきありがとうございます。

答えて

1

SolrのTikaをextractOnly=true(または必要なデータを直接取得するためにTikaを直接使用)と呼んで、自分でコンテンツをマージして1つのドキュメントとして送信する必要があります。ソルに複数値フィールドのセットに抽出された複数のファイルをマージするための固有のサポートはありません。

# pseudo code 
document = {files: [], content: []} 

for file in files: 
    document[files].append(file.name) 

    tika = solr.tika(extractOnly=true, read(file.name)) 
    document[content].append(tika[content]) 

solr.add(document) 
solr.commit() 

しかし、私はあなたがに関するメタデータを抽出し、単一の要求内のすべての代わりに、文書ごとに更新を行うことにしてください

関連する問題