我正在使用Solr 4.5。我正在尝试使用Apache Tika 1.4循环遍历多个html文件以从文件中提取数据。然后将这些元数据字段添加到SolrInputDocument。每次我必须循环文件并创建SolrInputDocument的实例。索引似乎非常慢,我们有大量的文件要索引。我需要专家的建议。这是我正在使用的示例代码。
String urlString = "http://server/solr/";
SolrServer solr = new HttpSolrServer(urlString);
UpdateRequest updrequest = new UpdateRequest("/update");
//For tika extraction initialisation
BodyContentHandler handler = new BodyContentHandler(10 * 1024 * 1024);
AutoDetectParser autoparser = new AutoDetectParser();
Metadata metadata = new Metadata();
ParseContext parseContext = new ParseContext();
然后对于每个html文件,我调用我编写的Tika提取方法ExtractData,并将我在此初始化的每个对象与我的文件一起传递:
ExtractData(file,solr,updrequest,handler,autoparser,metadata,parseContext);
ExtractData 的代码如下所示
public void ExtractData(String file,SolrServer solr,UpdateRequest updrequest,BodyContentHandler handler,AutoDetectParser autoparser,Metadata metadata,ParseContext parseContext) throws IOException,
SAXException, TikaException, SolrServerException {
SolrInputDocument solrinputdocument = new SolrInputDocument();
metadata.set(Metadata.CONTENT_TYPE, "text/html");
autoparser.parse(input, handler, metadata, parseContext);
//loop all metadata from the extraction and add the fields to the solr
String[] metadataNames = metadata.names();
for (String name : metadataNames) {
solrinputdocument.addField(name, metadata.get(name));
}
}
updrequest.add(solrinputdocument);
solr.request(updrequest);
}
答案 0 :(得分:1)
正如cheffe所说,你现在不能在DIH中使用多个线程(过去有可能这样做但是有缺陷并被删除了)。所以你最好的选择是:
答案 1 :(得分:0)
尝试使用显式的HtmlParser替换AutoDetectParser。我最近发现自动检测过程可能非常慢,似乎多次加载文件。