Nutch index源代码解析二)

接着上篇文档~~~~~

上篇文章写到,Nutch采用一个MR对爬取下来的文档进行清洗和封装成一个action列表。

接下来介绍怎么爬取下来的数据如何推送给solr。

----------------------------------------------------华丽的分割线---------------------------------------------

Ntuch自定义了一个 IndexerOutputFormat,这个类继承于FileOutputFormat Override getRecordWriter方法

代码如下:

 

public class IndexerOutputFormat extends FileOutputFormat<Text, NutchIndexAction> {

 

  @Override

  public RecordWriter<Text, NutchIndexAction> getRecordWriter(FileSystem ignored,

      JobConf job, String name, Progressable progress) throws IOException {

        ...

      }

方法里面调用Nutch自定义的一个接口NutchIndexWriter,我们看下他的一个实现类SolrWriter,我们主要看下他的close方法,代码如下:

 public void close() throws IOException {

    try {

      if (!inputDocs.isEmpty()) {

        LOG.info("Indexing " + Integer.toString(inputDocs.size()) + " documents");

        if (numDeletes > 0) {

          LOG.info("Deleting " + Integer.toString(numDeletes) + " documents");

        }

        UpdateRequest req = new UpdateRequest();

        req.add(inputDocs);

        req.setParams(params);

        req.process(solr);

        inputDocs.clear();

      }

      // solr.commit();

    } catch (final SolrServerException e) {

      throw makeIOException(e);

    }

 

在关闭的时候,Nutch会将封装好的数据采用基于http的POST的方法发送一个请求数据包给solr的服务器,solr.commit();这个方法在前面一篇文章中解释有些偏差,solr的整个事务都是在solr服务器端的,这跟以前的的事务有所区别,而这个方法就是再发送一个请求,要求提交当前的事务。

至于之前索引的增删查改也在这个类中实现,如想知道详情,可查看这个类实现。

至此,Nutch的整个index流程基本完成了。

由于时间仓促只是介绍了大概流程,如想了解其中一些细节问题,如有兴趣可以留言。或者发站内信给我。

 

第一次写,欢迎留言批评~~~~

酷

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值