Apache Nutch未能删除重复项(在一个solr核心上,但在另一个核心上)

Apache Nutch未能删除重复项(在一个solr核心上,但在另一个核心上),apache,hadoop,solr,nutch,Apache,Hadoop,Solr,Nutch,我有一个无法调试的问题 我开始使用Nutch爬网并将我们的页面索引到solr core 1。而且效果很好。这项工作如期完成 虽然我想开始索引或页面到我们的solr核心0,以及我们想要索引的其他项目 索引不是问题,它将爬行并索引良好。但在core 0上,索引末尾的重复数据消除任务仍然失败。我得到以下错误(如下)。据我所知,schema.xml和solrconfig.xml文件在core0和core1中具有所有相同的内容,除了在core0中,url字段不再是必需的,因为其他索引项没有url,因此id

我有一个无法调试的问题

我开始使用Nutch爬网并将我们的页面索引到solr core 1。而且效果很好。这项工作如期完成

虽然我想开始索引或页面到我们的solr核心0,以及我们想要索引的其他项目

索引不是问题,它将爬行并索引良好。但在core 0上,索引末尾的重复数据消除任务仍然失败。我得到以下错误(如下)。据我所知,schema.xml和solrconfig.xml文件在core0和core1中具有所有相同的内容,除了在core0中,url字段不再是必需的,因为其他索引项没有url,因此id字段是所有这些文件中的标准必填字段。可能是这个导致了问题吗?重复数据消除程序试图做什么,以及遇到了什么阻碍?我怎样才能通过考试呢?谢谢

2013-07-26 16:55:17797信息solr.SolrIndexWriter-索引157个文档
2013-07-26 16:55:30407 INFO solr.SolrMappingReader-来源:content dest:content
2013-07-26 16:55:30444信息solr.SolrMappingReader-来源:标题目的:标题
2013-07-26 16:55:30444信息solr.SolrMappingReader-来源:主机目标:主机
2013-07-26 16:55:30444信息solr.SolrMappingReader-来源:段目的:段
2013-07-26 16:55:30444信息solr.SolrMappingReader-来源:boost dest:boost
2013-07-26 16:55:30444信息solr.SolrMappingReader-来源:摘要目的:摘要
2013-07-26 16:55:30444信息solr.SolrMappingReader-来源:tstamp dest:tstamp
2013-07-26 16:55:30444 INFO solr.SolrMappingReader-来源:url dest:id
2013-07-26 16:55:30444 INFO solr.SolrMappingReader-来源:url dest:url
2013-07-26 16:55:31590信息索引器。索引作业-索引器:于2013-07-26 16:55:31完成,运行时间:00:00:19
2013-07-26 16:55:31593信息solr.SolrDeleteDuplicates-SolrDeleteDuplicates:从2013-07-26 16:55:31开始
2013-07-26 16:55:31593信息solr.SolrDeleteDuplicates-SolrDeleteDuplicates:solr url:http://:/solr/core0/
2013-07-26 16:55:32043警告映射。FileOutputCommitter-清除中的输出路径为空
2013-07-26 16:55:32043 WARN mapred.LocalJobRunner-job_local1142877999_0055
java.lang.Exception:java.lang.NullPointerException
位于org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:354)
原因:java.lang.NullPointerException
位于org.apache.hadoop.io.Text.encode(Text.java:388)
位于org.apache.hadoop.io.Text.set(Text.java:178)
位于org.apache.nutch.indexer.solr.SolrDeleteDuplicates$SolrInputFormat$1.next(SolrDeleteDuplicates.java:270)
位于org.apache.nutch.indexer.solr.SolrDeleteDuplicates$SolrInputFormat$1.next(SolrDeleteDuplicates.java:241)
位于org.apache.hadoop.mapred.MapTask$TrackedRecordReader.moveToNext(MapTask.java:230)
位于org.apache.hadoop.mapred.MapTask$TrackedRecordReader.next(MapTask.java:210)
位于org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:48)
位于org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:430)
位于org.apache.hadoop.mapred.MapTask.run(MapTask.java:366)
位于org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:223)
位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
在java.util.concurrent.FutureTask.run(FutureTask.java:166)中
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

在java.lang.Thread.run(Thread.java:679)

中,由于文档没有url字段,因此文档的id为空,因此在运行以下方法时引发空指针异常

下面是nutch 1.7主干中SolrDeleteDuplicate类的代码,其中solr记录由id字段删除

updateRequest.deleteById(solrRecord.id);
  • updateRequest=>org.apache.solr.client.solrj.request.updateRequest的实例

  • solrRecord=>需要删除的solr文档

  • id=>从nutch发行版的conf文件夹中的solrindex-mapping.xml读取的solr文档的id。(如果为null,则会引发异常)

很酷,谢谢你的解释。不管怎样,当一个人有url而另一个人没有url时,爬网网页和非网页文档可以共存于同一个核心中吗?第二次检查时,它似乎是在重复nutch爬网内容,只是被非nutch内容阻塞了,错误消息只是偶然的吗?那样的话,我想我不会再做什么了。如果可行,它将只删除solr索引中具有id字段的文档。对于所有其他人,它将抛出一个异常。为了避免这种情况,不要使用url作为id(唯一字段)。最好使用字段作为id。