在一个请求中将多个文件索引到 Solr 并为每个文件添加字段

Index multiple files to Solr in one request and add fields for each file

作为最佳实践,我尝试在一次请求中将一堆文档索引到 Solr,而不是一次索引一个。现在我遇到的问题是,我正在编制索引的文件属于不同类型(pdf、word 文档、文本文件……),因此具有从 Tika 中提取并编制索引的不同元数据。 我想对所有文件都有一定的 fields/information,不管类型如何,例如创建者、创建日期和路径,但是我不知道如何在索引所有文件时手动添加字段一次。 如果我一次索引一个文件,我可以只添加带有 request.setParam() 的字段,但这是针对整个请求而不是针对一个文件。即使这样的事情是可能的,我如何在 Java 中获取文件创建者等信息?

是否可以为每个文件添加字段?

if(listOfFiles != null) {
   for (File file : listOfFiles) {
      if (file.isFile()) {
         request.addFile(file, getContentType(file));
         //add field only for this file?
      }else{
         //Folder, call the same method again -> recursion
         request = addFilesToRequest(file, request);
      }
   }
}

据我所知,无法在同一请求中提交多个文件。无论如何,这些请求的处理量通常非常大,因此降低 HTTP 请求量可能不会对总处理时间产生太大影响。

如果你想加快速度,你可以process all your files locally with Tika first(Tika 也是 Solr 内部使用的),然后只提交提取的数据。这样你就可以多线程提取过程,将结果添加到队列中,并让 Solr 提交过程随着队列的增长而执行——所有内容都以几个更大的批次提交给 Solr(例如一次 1000 个文档)。

这还允许您扩展索引过程,而无需添加更多 Solr 服务器来使该部分过程运行得更快(如果您的 Solr 节点可以跟上搜索流量,则不需要扩展它只是为了处理文件)。

手动使用 Tika 还可以更轻松地在处理过程中更正或更改细节,例如文件格式返回不同时区的日期等。