`
chengqianl
  • 浏览: 53161 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

nutch1.2 DeleteDuplicates IndexMerger 详解

阅读更多


job 1 
    map: 默认Mapper ,
    输出为key:Text url value :IndexDoc

    job.setInputFormat(InputFormat.class);  关键在于这个Format会把lucene的doc转换成IndexDoc 代码如下:


public boolean next(Text key, IndexDoc indexDoc)
        throws IOException {
       
        // skip empty indexes
        if (indexReader == null || maxDoc <= 0)
          return false;

        // skip deleted documents
        while (doc < maxDoc && indexReader.isDeleted(doc)) doc++;
        if (doc >= maxDoc)
          return false;

        Document document = indexReader.document(doc);

        // fill in key
        key.set(document.get("url"));
        // fill in value
        indexDoc.keep = true;
        indexDoc.url.set(document.get("url"));
        indexDoc.hash.setDigest(document.get("digest"));
        indexDoc.score = Float.parseFloat(document.get("boost"));
        try {
          indexDoc.time = DateTools.stringToTime(document.get("tstamp"));
        } catch (Exception e) {
          // try to figure out the time from segment name
          try {
            String segname = document.get("segment");
            indexDoc.time = new SimpleDateFormat("yyyyMMddHHmmss").parse(segname).getTime();
            // make it unique
            indexDoc.time += doc;
          } catch (Exception e1) {
            // use current time
            indexDoc.time = System.currentTimeMillis();
          }
        }
        indexDoc.index = index;
        indexDoc.doc = doc;

        doc++;

        return true;
      }


reduce :UrlsReducer  为index的数据去重复准备数据,一个url只能有一个值
   
        1 对同一个key:如果有多个value,比较每个value的time,取最大的time,小于的数据设置 latest.keep = false; 写入,最后写入 latest.keep = true;的数据
          2 key:Text 是签名,value:IndexDoc


job2  map: 默认Mapper 
    map out的数据    key:MD5Hash  value:IndexDoc
       reduce:HashReducer   写入的数据都是要删除的
      1 对数据如果IndexDoc.keep=false 写入
       2 如果IndexDoc.keep=ture的多个值,如果dedup.keep.highest.score为true说明按照score比较,否则安装url的长度比较。如果按照score比较,score分数小的写入,否则删除url的长度长的


job 3
   map : DeleteDuplicates
        1 对keep不为true的数据写入
           key: 对应的目录 value:lucene docId


   reduce : DeleteDuplicates
    使用indexreader做删除操作

    代码如下

Path index = new Path(key.toString());
    IndexReader reader = IndexReader.open(new FsDirectory(fs, index, false, getConf()), false);
    try {
      while (values.hasNext()) {
        IntWritable value = values.next();
        LOG.debug("-delete " + index + " doc=" + value);
        reader.deleteDocument(value.get());
      }
    } finally {
      reader.close();
    }


merger索引IndexMerger
用构建crawl/indexes 下面的所有Directory
Directory[] dirs = new Directory[indexes.length];
    for (int i = 0; i < indexes.length; i++) {
      if (LOG.isInfoEnabled()) { LOG.info("Adding " + indexes[i]); }
      dirs[i] = new FsDirectory(fs, indexes[i], false, getConf());
    }


merger 使用IndexWriter  的addIndexesNoOptimize 进行merger

          //
    // Merge indices
    //
    IndexWriter writer = new IndexWriter(
    FSDirectory.open(new File(localOutput.toString())), null, true,
    MaxFieldLength.UNLIMITED);
    writer.setMergeFactor(getConf().getInt("indexer.mergeFactor", LogMergePolicy.DEFAULT_MERGE_FACTOR));
    writer.setMaxBufferedDocs(getConf().getInt("indexer.minMergeDocs", IndexWriter.DEFAULT_MAX_BUFFERED_DOCS));
    writer.setMaxMergeDocs(getConf().getInt("indexer.maxMergeDocs", LogMergePolicy.DEFAULT_MAX_MERGE_DOCS));
    writer.setTermIndexInterval(getConf().getInt("indexer.termIndexInterval", IndexWriter.DEFAULT_TERM_INDEX_INTERVAL));
    writer.setInfoStream(LogUtil.getDebugStream(LOG));
    writer.setUseCompoundFile(false);
    writer.setSimilarity(new NutchSimilarity());
    writer.addIndexesNoOptimize(dirs);
    writer.optimize();
    writer.close();

最后使用
fs.completeLocalOutput(outputIndex, tmpLocalOutput);
生成crawl/index 至此nutch索引的部分全部完
  • 大小: 32.9 KB
分享到:
评论

相关推荐

    nutch1.2 java的project

    1. **导入项目**:在Eclipse中选择“File” &gt; “Import” &gt; “Existing Projects into Workspace”,然后浏览到下载的`nutch1.2+Project`目录,导入项目。 2. **添加库**:确保你的Eclipse环境中已经安装了Apache ...

    nutch1.2 java project

    Nutch 1.2 是一个开源的网络爬虫项目,基于 Java 编写,用于抓取互联网上的网页并建立索引。这个项目是 Apache Software Foundation 的一部分,它为大规模的数据采集提供了强大的工具。Nutch 1.2 版本相对于早期版本...

    Nutch 1.2源码阅读

    ### Nutch 1.2 源码阅读深入解析 #### Crawl类核心作用与流程概览 在深入了解Nutch 1.2源码之前,我们先明确Nutch的架构和工作流程。Nutch作为一款开源搜索引擎框架,其功能涵盖网页抓取、索引构建以及查询处理。...

    nutch1.2源码

    Nutch 1.2是该项目的一个稳定版本,提供了许多改进和优化,使得它在搜索引擎构建、数据分析等领域具有广泛应用。 一、Nutch概述 Nutch是由Apache软件基金会开发的开源Web爬虫项目,主要用于抓取互联网上的网页并...

    myeclipse8.5导入nutch1.2源码

    - 在 Default output folder 设置中,将输出目录更改为 `nutch1.2/bin/tmp_nutch`。 - 转到 Libraries 标签页,点击 Add Class Folder,选择 `nutch1.2/conf` 目录。 3. **调整库顺序**: - 在 Order and Export...

    nutch1.2测试文档

    nutch1.2测试文档

    Windows下cygwin+MyEclipse 8.5+Nutch1.2+Tomcat 6.0

    ### Windows下cygwin+MyEclipse 8.5+Nutch1.2+Tomcat 6.0 本文旨在详细介绍如何在Windows环境下搭建基于cygwin、MyEclipse 8.5、Nutch 1.2及Tomcat 6.0的开发环境,并对每个步骤进行深入解析。 #### 一、Cygwin的...

    nutch-1.2.war

    nutch官方简单案例,请版本是nutch-1.2.war

    nutch-1.2.part02

    nutch Nutch是一个由Java实现的,刚刚诞生开放源代码(open-source)的web搜索引擎。 尽管Web搜索是漫游Internet的基本要求, 但是现有web搜索引擎的数目却在下降。 并且这很有可能进一步演变成为一个公司垄断了几乎...

    实验报告(利用Nutch和IKanalyzer构造中文分词搜索引擎)

    尝试使用Nutch 0.9和IKAnalyzer 3.1.6GA组合,但由于版本兼容性问题导致失败,因此改用Nutch 1.2和IKAnalyzer 3.2.8,并将Tomcat升级到6.0.35版本。 在Nutch 1.2中集成IKAnalyzer,需要修改NutchAnalysis.jj文件,...

    Nutch搜索引擎培训讲义

    - 选择“Source”选项卡,将默认输出目录从`nutch1.2/bin`修改为`nutch1.2/_bin`。 - 对于bin文件夹,可以通过右键点击“Team” &gt; “Restore”来恢复其内容。 3. **添加JAR包** - 通过“Add JARs”功能,将`...

    nutch-1.2.part06

    nutch Nutch是一个由Java实现的,刚刚诞生开放源代码(open-source)的web搜索引擎。 尽管Web搜索是漫游Internet的基本要求, 但是现有web搜索引擎的数目却在下降。 并且这很有可能进一步演变成为一个公司垄断了几乎...

    nutch部分网页乱码BUG修正

    Nutch是Apache开发的一款开源网络爬虫项目,用于抓取互联网上的网页并建立索引,以便于搜索引擎进行数据处理。然而,在实际使用过程中,由于编码问题,Nutch可能会出现部分网页乱码的情况。本篇文章将深入探讨这个...

    搜索数据资料

    Nutch1.2是Apache Nutch的一个版本,它是一个开源的网络爬虫项目,用于抓取和索引互联网上的网页,进而支持搜索功能。 在描述中提到的“搜索nutch1-2数据资料”,意味着我们要关注Nutch1.2的特定方面,如其数据抓取...

    nutch-1.2.part07

    nutch Nutch是一个由Java实现的,刚刚诞生开放源代码(open-source)的web搜索引擎。 尽管Web搜索是漫游Internet的基本要求, 但是现有web搜索引擎的数目却在下降。 并且这很有可能进一步演变成为一个公司垄断了几乎...

    nutch-1.2.part05

    nutch Nutch是一个由Java实现的,刚刚诞生开放源代码(open-source)的web搜索引擎。 尽管Web搜索是漫游Internet的基本要求, 但是现有web搜索引擎的数目却在下降。 并且这很有可能进一步演变成为一个公司垄断了几乎...

    nutch-1.2.part03

    nutch Nutch是一个由Java实现的,刚刚诞生开放源代码(open-source)的web搜索引擎。 尽管Web搜索是漫游Internet的基本要求, 但是现有web搜索引擎的数目却在下降。 并且这很有可能进一步演变成为一个公司垄断了几乎...

    nutch-1.2.part10

    Nutch是一个由Java实现的,刚刚诞生开放源代码(open-source)的web搜索引擎。 尽管Web搜索是漫游Internet的基本要求, 但是现有web搜索引擎的数目却在下降。 并且这很有可能进一步演变成为一个公司垄断了几乎所有的...

    搭建nutch web开发环境

    本教程将详细介绍如何搭建Nutch 1.2的Web开发环境,因为从Nutch 1.3版本开始,Web界面部分已被移除。 首先,我们需要理解Nutch的工作流程,它主要包括五个主要步骤:抓取、解析、索引、查询和排名。Nutch提供了强大...

Global site tag (gtag.js) - Google Analytics