按照bin/nutch下的脚步一步一步的执行抓取:Inject,Generate,Fetcher,Parse,Updatedb,Solrindex,SolrDump.

每部其实都可以打出 “bin/nutch $commands”命令来进行命令的提示,

例如:"bin/nutch Inject" 注入URL,"bin/nutch Generate"生成抓取列表 。。。。。

对于一个不太熟悉nutch的人来说,似乎可以按照这个步骤一步一来走,最终将索引提交给solr。

但是,这个里面有个坑爹的事:bin/nutch updatedb ,你在执行的时候它其实没有提示你"bin/nutch updatedb -crawlId DBNAME",所以运行后,如果你

不仔细看输出的日志,就以为update成功 了。呵呵,恭喜你进入坑里面了。。。在后面提交索引的时候怎么都提交不上去,让人头疼。。

通过跟踪代码可以看到在solrindex的时候在org.apache.nutch.indexer.IndexerJob下的IndexerMapper类中的方法map代码如下:

public void map(String key, WebPage page, Context context)
throws IOException, InterruptedException {
LOG.info("lvyf:begin indexmapper....");
ParseStatus pstatus = page.getParseStatus();
LOG.info("lvyf:parseStatus:"+String.valueOf(pstatus.getMinorCode()));
LOG.info("lvyf结果 :"+(pstatus == null || !ParseStatusUtils.isSuccess(pstatus)
|| pstatus.getMinorCode() == ParseStatusCodes.SUCCESS_REDIRECT));
if (pstatus == null || !ParseStatusUtils.isSuccess(pstatus)
|| pstatus.getMinorCode() == ParseStatusCodes.SUCCESS_REDIRECT) {
return; // filter urls not parsed
} Utf8 mark = Mark.UPDATEDB_MARK.checkMark(page);
LOG.info("lvyf:mark结果:"+mark);
if (!batchId.equals(REINDEX)) {
LOG.info("lvyf:不相等");
if (!NutchJob.shouldProcess(mark, batchId)) {
if (LOG.isDebugEnabled()) {
LOG.debug("Skipping " + TableUtil.unreverseUrl(key) + "; different batch id (" + mark + ")");
}
return;
}
}
LOG.info("lvyf:开始索引");
NutchDocument doc = indexUtil.index(key, page);
if (doc == null) {
LOG.info("lvyf:索引结果为null");
return;
}
if (mark != null) {
LOG.info("lvyf:mark不为空");
Mark.INDEX_MARK.putMark(page, Mark.UPDATEDB_MARK.checkMark(page));
store.put(key, page);
}
LOG.info("lvyf:开始输出索引结果");
context.write(key, doc);
}
}

  看到"Utf8 mark = Mark.UPDATEDB_MARK.checkMark(page);"这句了吗,你可以到数据库看下这个字段的值:

 hbase(main)::> get 'TCrawl_webpage','com.163.sports:http/15/0117/09/AG5D88EU00052UUC.html','mk'
COLUMN CELL
mk:__prsmrk__ timestamp=, value=-
mk:_ftcmrk_ timestamp=, value=-
mk:_gnmrk_ timestamp=, value=-
mk:_injmrk_ timestamp=, value=y
mk:dist timestamp=, value=
row(s) in 0.1160 seconds

这里面没有"updmark",所以上面的mark结果为null,接着就return出去了。通过纠正后就变成这样了:

 hbase(main)::> get 'TCrawl_webpage','com.163.sports:http/15/0117/09/AG5D88EU00052UUC.html','mk'
COLUMN CELL
mk:_injmrk_ timestamp=, value=y
mk:_updmrk_ timestamp=, value=-
mk:dist timestamp=, value=
row(s) in 0.2070 seconds

你再去solrindex发现可以提交上去了。问题就这样解决了

Nutch2.2.1 问题一:索引不能提交的更多相关文章

  1. Git历险记(四)——索引与提交的幕后故事

    我想如果看过<Git历险记>的前面三篇文章的朋友可能已经知道怎么用git add,git commit这两个命令了:知道它们一个是把文件暂存到索引中为下一次提交做准备,一个创建新的提交(c ...

  2. SiteMap 提交,并使用正确的方式提交给搜索引擎

    原创Sitemap收录介绍 对于网站中原创内容的网页url,站长可以将其制作成标准的Sitemap(站点地图)文件. 站长提交Sitemap文件后,好搜会使用Sitemap中的内容来了解网站结构等信息 ...

  3. Lucene学习总结之三:Lucene的索引文件格式(1)

    Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...

  4. git学习四:eclipse使用git提交项目

    支持原创:http://blog.csdn.net/u014079773/article/details/51595127 准备工作: 目的:eclipse使用git提交本地项目,提交至远程githu ...

  5. Elasticsearch-深入理解索引原理

    最近开始大面积使用ES,很多地方都是知其然不知其所以然,特地翻看了很多资料和大牛的文档,简单汇总一篇.内容多为摘抄,说是深入其实也是一点浅尝辄止的理解.希望大家领会精神. 首先学习要从官方开始地址如下 ...

  6. 深入Lucene索引机制

    Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...

  7. Solr系列四:Solr(solrj 、索引API 、 结构化数据导入)

    一.SolrJ介绍 1. SolrJ是什么? Solr提供的用于JAVA应用中访问solr服务API的客户端jar.在我们的应用中引入solrj: <dependency> <gro ...

  8. Solr增删改查索引

    一.添加索引,提交文档 1.如图,我的xml文档有predicate.object字段,这些在Solr配置文档里没有,所以xml文档提交不了 2.在F:\solr-4.10.0\example\sol ...

  9. eclipse使用git提交项目

    eclipse使用git提交项目有2种方式:一种是git命令窗口,另一种是eclipse自带git插件(跟svn插件一样使用) 一.使用git命令窗口提交项目 1.首先官网下载git并安装,然后配置用 ...

随机推荐

  1. create-react-app react脚手架

    create-react-app react脚手架 官方脚手架 1.安装 npm install -g create-react-app 2.创建项目 create-react-app react-c ...

  2. leetcode724

    public class Solution { public int PivotIndex(int[] nums) { ) { ; } ; ]; if (left == right) { ; } ; ...

  3. JSTL之C标签的用法

    转自:https://my.oschina.net/zimingforever/blog/78980 最近开始整理以前的onenote,居然有200多篇,大致翻了下,很多内容都是在大学的时候学习的时候 ...

  4. python:窗口化和制作图形

    #圆 from tkinter import * canvas = Canvas(width=800, height=600, bg='yellow')#声明窗口属性 canvas.pack(expa ...

  5. react native android 真机调试

    http://localhost:8081/index.android.bundle?platform=android 晕死,设备掉线了 C:\Users\ZHONGZHENHUA\.android\ ...

  6. 61. Rotate List(List)

    Given a list, rotate the list to the right by k places, where k is non-negative. For example: Given ...

  7. 这几天搞UNITY遇到的坑

    都是在IPHONE设备上遇到的,UNITY版本是5.4.4f1 1.EASY AR出现扫描蓝线绿块的,是因为不是EASY AR的CameraDeviceBehavior默认参数1280X720 2.自 ...

  8. 785. Is Graph Bipartite?从两个集合中取点构图

    [抄题]: Given an undirected graph, return true if and only if it is bipartite. Recall that a graph is  ...

  9. Webdings和Wingdings字符码对应表

    刚才研究动网论坛代码,发现一个页面提示标记 i 感觉很神奇,看了半天才明白原来是一种叫“Webdings”的字体,其实很简单,只需要<font face='webdings' size=&quo ...

  10. Centos6.6升级python2到python3

    系统更新部分: 一.由于系统原有的源无法连接,需要更新为新的源.起初,首选163的源,但是由于更改源以后,无法使用yum等问题,所以直接使用上海交通大学提供的源. 修改前,将原来/etc/yum.re ...