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

Java 在一个请求中将多个文件索引到Solr,并为每个文件添加字段,java,solr,solrj,Java,Solr,Solrj,作为最佳实践,我尝试在一个请求中为一组文档编制索引,而不是一次为一个文档编制索引。现在我遇到的问题是,我正在索引的文件是不同类型的(pdf、word文档、文本文件等),因此从Tika提取并索引的元数据不同。 我希望所有文件都有特定的字段/信息,无论类型如何,例如创建者、创建日期和路径,但我不知道如何在一次为所有文件编制索引时手动添加字段。 如果我一次索引一个文件,我可以只添加request.setParam()字段,但这是针对整个请求的,而不是针对一个文件。即使这样做是可能的,我如何获得Java

作为最佳实践,我尝试在一个请求中为一组文档编制索引,而不是一次为一个文档编制索引。现在我遇到的问题是,我正在索引的文件是不同类型的(pdf、word文档、文本文件等),因此从Tika提取并索引的元数据不同。 我希望所有文件都有特定的字段/信息,无论类型如何,例如创建者、创建日期和路径,但我不知道如何在一次为所有文件编制索引时手动添加字段。 如果我一次索引一个文件,我可以只添加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请求的数量可能不会对总处理时间产生太大的影响

如果您想加快速度,您可以(Tika也是Solr内部使用的),然后只提交提取的数据。通过这种方式,您可以对提取过程进行多线程处理,将结果添加到队列中,并在队列增长时执行Solr提交过程——将所有内容以几个更大的批提交给Solr(例如,一次提交1000个文档)

这还允许您扩展索引过程,而无需添加更多的Solr服务器来加快这部分过程(如果Solr节点能够跟上搜索流量,则不必仅扩展到处理文档)

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