2014-01-07 50 views
0

Iam尝试将文档索引到solrj。 iam使用Solr4.5,我有大量的文件被索引。索引每个文件的方法是什么,以避免性能瓶颈。将大量文件添加到Solr中

+0

我们说了多长时间?你只需要索引这些文件一次。 –

+0

@Bartlomiej Lewandowski:它在1小时内索引35,000条记录。所以我有70万条记录的总记录需要等待休息。 。是的,我必须索引这些文件一次。但iam调用每个文件的solr更新请求。 – user3161879

回答

0

检查的第一件事是服务器端的日志,并查找有关提交信息。解析每个文件后,您可能会做出一个艰难的提交。这太贵了。你可以看看软提交或commitWithin参数让文件稍后显示。其次,您似乎正在向Solr发送请求,以获取您的文件并运行Tika提取。所以,这可能会每次重新启动Solr内部的Tika。您将无法批处理,因为其他答案似乎暗示。

但是你可以在你的客户端本地运行Tika并初始化一次并保持它。这就为如何构建SolrInputDocument提供了更多的灵活性,然后您可以对其进行批处理。

+0

我们如何运行泰克提取外部。我认为solrj会在内部处理这件事。 – user3161879

+0

如果我正确理解您的代码,您将发送此请求以提取处理程序。这意味着Solr *服务器*正在运行Tika。相反,您可以在Java进程中实例化Tika并自行运行它。你会失去一些Solr实现的字段映射功能,但我怀疑你还没有使用它。 –

+0

是的,会尝试你的建议和检查。但还有一件事情,当iam试图逐一索引多个文档时,它成功索引了100,000条记录,然后它开始说服务器的其余部分说服务器在http:// servername/solr /返回非正常状态:500,消息:内部服务器错误。可能是什么原因? – user3161879

0

solr对每个文档的更新速度很慢。

添加所有文档,然后使用更新进行提交会更好。 从Solr的维基摘自:

Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); 
docs.add(doc1); 
docs.add(doc2); 

UpdateRequest req = new UpdateRequest(); 
req.setAction(UpdateRequest.ACTION.COMMIT, false, false); 
req.add(docs); 
UpdateResponse rsp = req.process(server); 
+0

Iam通过逐行解析另一个文件来获取每个区域的索引。所以我没有收集任何文件。我一次只有一个文件。每当我循环时,我应该向这个集合添加文件吗?然后调用该集合的更新请求? – user3161879

+0

@ user3161879是的,将它们添加到集合中,完成后,使用集合进行更新请求。 –

+0

我更改了代码,并将收集文档传递给服务器solr。但是里面的每个文档都有明确设置的id。但是solr正在抛出一个例外,因为Document缺少必需的uniqueKey字段:id。还有什么需要做的。 – user3161879