我想为同一个Solr ID索引多个pdf文件。对于我们的一个项目,我们有一些代表如下的对象:
{"id" : "object:1234",
"authors" : ["me", "you", ...],
"keywords": ["key1", "key3", ...],
"files" : [
"/tmp/file1.pdf",
"/tmp/file2.pdf",
"/tmp/file3.pdf"
]
}
我们创建了第一个流程,可以快速将基本元数据(所有字段都需要'文件')索引到我们的Solr6服务器中。 现在我们需要一个进程将所有文件内容索引到Solr中以获得相同的ID。
因此,第一个进程将创建此Solr文档(此过程已经有效):
{"id":"object:1234",
"keywords":["key1", "key2"],
"authors": ["me", "you"],
"last_modified":"2017-09-04T12:00:00.000Z",
"_version_":1577256778756784128
}
在我的第二个过程结束时,我希望我的solrDocument看起来像这样:
{"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文档。但是这个解决方案不是很优雅....并且不适用于大文件。
你知道一个更好的解决方案来解决我的问题吗? 非常感谢你的帮助。
答案 0 :(得分:1)
我很确定你必须完成你所做的 - 用extractOnly=true
调用Solr的Tika(或直接使用Tika获取你需要的数据),然后自己合并内容并将其作为Solr的单一文件。将提取的多个文件合并到一组多值字段中没有固有的支持。
但是,我会在一个请求中执行所有操作,而不是为您提取元数据的每个文档进行更新:
# 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()