按照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. C# 项目开发笔记

    这里主要记录一些容易错的内容,在项目开发中总结出来的经验和教训. 1 语法 (1)判断float是否为Nan,不能使用 xxx = flaot.Nan去做,要使用float.IsNan去做. (2)u ...

  2. python算法之希尔排序

    希尔排序 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shell于1959年提出而得名. 希尔 ...

  3. Docker常用操作命令

    docker 常用管理命令 修改镜像地址 sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ...

  4. <转>Linux环境进程间通信(五): 共享内存(下)

    http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index2.html 系统调用mmap()通过映射一个普通文件实现共享内存.系统V则是通 ...

  5. php yii 学习笔记

    yii 归档安装 1,下载 yii  Yii2的高级应用程序模板 2,解压模板到目录,进入控制台进入目录 运行 php init 安装YII 3,进入 http://localhost/phpmyad ...

  6. Java-汉字繁体拼音转换

    import com.github.stuxuhai.jpinyin.ChineseHelper; import com.github.stuxuhai.jpinyin.PinyinFormat; i ...

  7. 714. Best Time to Buy and Sell Stock with Transaction Fee有交易费的买卖股票

    [抄题]: Your are given an array of integers prices, for which the i-th element is the price of a given ...

  8. spring4-2-bean配置-5-bean的作用域

  9. Idea安装lombok插件及使用

    安装lombok插件:File-settings 具体步骤如下图:1 2.找到Plugins 然后在搜索栏里搜索lombok 点击下放的Search in repositories 3.选中lombo ...

  10. code2102 石子归并2

    划分dp 注意环形,需要把原数复制成两份再进行,详见: http://www.cnblogs.com/FuTaimeng/p/5427426.html 初始条件:dp[i][i]=0 转移方程:dp[ ...