将多个二进制文件索引到唯一的solrDocument中

时间:2017-09-04 12:26:20

标签: indexing solr lucene

我想为同一个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文档。但是这个解决方案不是很优雅....并且不适用于大文件。

你知道一个更好的解决方案来解决我的问题吗? 非常感谢你的帮助。

1 个答案:

答案 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()