`
banditjava
  • 浏览: 160161 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Nutch开源搜索引擎增量索引recrawl的终极解决办法(续)

阅读更多
十一要放假了,先祝广大同学们节日快乐!

在之前的一篇文章中,我给出了Nutch的recrawl的解决办法。说实话,当时已经觉得可以应对recrawl的问题,但是我自己在测试过程中发现,在index的merge时,并没有完全成功。本文就是针对上一篇文章给出解决办法。

具体的原因是在merge完成后,会在index目录下面生成一个merge-output目录,这是由于临时目录newindexs和index执行完毕后产生的,这就增量索引的结果。

在shell中的命令是:/nutch/search/bin/nutch merge crawl10/index crawl10/newindexes

我原先的index目录中_0.fdt原来就是6292105 Byte,执行完后并没有增加,而在merge-output中的_0.fdt大小是1636852 Byte。说明这两块索引并没有合并在一起。

[nutch@linux1 crawl10-new]$ ll index/
total 76228
-rw-r--r--  1 nutch users  6292105 Sep 28 17:02 _0.fdt
-rw-r--r--  1 nutch users   236848 Sep 28 17:02 _0.fdx
-rw-r--r--  1 nutch users       81 Sep 28 17:02 _0.fnm
-rw-r--r--  1 nutch users 22120872 Sep 28 17:02 _0.frq
-rw-r--r--  1 nutch users   177640 Sep 28 17:02 _0.nrm
-rw-r--r--  1 nutch users 48174123 Sep 28 17:02 _0.prx
-rw-r--r--  1 nutch users    12794 Sep 28 17:02 _0.tii
-rw-r--r--  1 nutch users   902086 Sep 28 17:02 _0.tis
drwxr-xr-x  2 nutch users     4096 Sep 28 17:02 merge-output
-rw-r--r--  1 nutch users       41 Sep 28 17:02 segments_2
-rw-r--r--  1 nutch users       20 Sep 28 17:02 segments.gen

[nutch@linux1 crawl10-new]$ ll index/merge-output/
total 20520
-rw-r--r--  1 nutch users  1636852 Sep 28 18:53 _0.fdt
-rw-r--r--  1 nutch users    61608 Sep 28 18:53 _0.fdx
-rw-r--r--  1 nutch users       81 Sep 28 18:53 _0.fnm
-rw-r--r--  1 nutch users  5782861 Sep 28 18:53 _0.frq
-rw-r--r--  1 nutch users    46210 Sep 28 18:53 _0.nrm
-rw-r--r--  1 nutch users 13004666 Sep 28 18:53 _0.prx
-rw-r--r--  1 nutch users     5406 Sep 28 18:53 _0.tii
-rw-r--r--  1 nutch users   405471 Sep 28 18:53 _0.tis
-rw-r--r--  1 nutch users       41 Sep 28 18:53 segments_2
-rw-r--r--  1 nutch users       20 Sep 28 18:53 segments.gen


不知道nutch是否有这种合并的功能,呵呵,我没有找到,于是就自己写了一个类MergeLuceneIndex来解决这个问题。具体的思路就是用lucene的索引合并功能来处理这个问题,将merge-output下面的索引文件合并到index下面,执行后_1.fdt大小变成7928957 Byte,说明合并成功,重启tomcat后,就能看到增量的索引的内容了。


[nutch@linux1 crawl10-new]$ ll index
total 96360
-rw-r--r--  1 root  root   7928957 Sep 28 18:53 _1.fdt
-rw-r--r--  1 root  root    298456 Sep 28 18:53 _1.fdx
-rw-r--r--  1 root  root        81 Sep 28 18:53 _1.fnm
-rw-r--r--  1 root  root  27954608 Sep 28 18:53 _1.frq
-rw-r--r--  1 root  root    223846 Sep 28 18:53 _1.nrm
-rw-r--r--  1 root  root  61178789 Sep 28 18:53 _1.prx
-rw-r--r--  1 root  root     13078 Sep 28 18:53 _1.tii
-rw-r--r--  1 root  root    922972 Sep 28 18:53 _1.tis
drwxr-xr-x  2 nutch users     4096 Sep 28 18:53 merge-output
-rw-r--r--  1 root  root        41 Sep 28 18:53 segments_3
-rw-r--r--  1 root  root        20 Sep 28 18:53 segments.gen

合并索引是lucene的基本功能,很好很强大。由于我选paoding做中文分词,所以需要配置好paoding,再运行下面这个类。

//注意:nutch默认是用分拆式index,需要将compound设成false
indexWriter.setUseCompoundFile(false);

共享一下代码!
package org.apache.nutch.tool;
 import java.io.File;

import net.paoding.analysis.analyzer.PaodingAnalyzer;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.FSDirectory;
 /**
  * 这个类是为了处理nutch的本地index用的,合并merge-out与原始的index文件
  * @author kevin
  *
  */  
 public class MergeLuceneIndex {  
     /** 
      * @author about merge lucene Index  by kevin 
      * 将小索引文件合并到大的索引文件中去     
      * @param from 将要合并到to文件的文件 
      * @param to 将from文件合并到该文件 
      * @param sa 
      */  
     private static void mergeIndex(File from, File to,Analyzer analyzer) {  
         IndexWriter indexWriter = null;  
         try {  
             System.out.println("Merge start! ");  
             indexWriter = new IndexWriter(to, analyzer, false);  
             indexWriter.setUseCompoundFile(false);//注意:nutch默认是用分拆式index,需要将compound设成false
             indexWriter.setMergeFactor(100000);  
             indexWriter.setMaxFieldLength(Integer.MAX_VALUE);  
             indexWriter.setMaxBufferedDocs(Integer.MAX_VALUE);  
             indexWriter.setMaxMergeDocs(Integer.MAX_VALUE);  
             FSDirectory[] fs = { FSDirectory.getDirectory(from, false) };  
             indexWriter.addIndexes(fs);  
             indexWriter.optimize();  
             indexWriter.close();  
             System.out.println("Merge finished!");  
         } catch (Exception e) {  
             System.out.println("Merge error!");  
             e.printStackTrace();  
         } finally {  
             try {  
                 if (indexWriter != null)  
                     indexWriter.close();  
             } catch (Exception e) {  
            	 e.printStackTrace();
             }
         }  
     }  
       
     public static void main(String[] arg){  
         //File from = new File("/nutch/local/crawl10-new/index/merge-output");  
         //File to = new File("/nutch/local/crawl10-new/index");      	 
    	 File from = new File(arg[0]);  
         File to = new File(arg[1]);
         mergeIndex(from,to,new PaodingAnalyzer());  
     }     
 }  


希望这个补救措施能够进一步帮助到大家,我可不希望我发表的文章误人子弟,嘿嘿!

分享到:
评论
4 楼 nhy520 2009-05-23  
怎么执行脚本啊大哥.我不会shell编程
3 楼 yawl 2009-01-09  
http://wiki.apache.org/nutch/IntranetRecrawl

最前面的注解是我加的。今年初使用过nutch一段,发现这个recrawl的并不像宣称的那样工作。
2 楼 ianwong 2008-12-18  
你确信merge-out产生的是增量数据??
1 楼 ianwong 2008-12-17  
合并后 查询服务器启动不起来了哦

相关推荐

    Nutch开源搜索引擎增量索引recrawl的终极解决办法

    ### Nutch开源搜索引擎增量索引recrawl的终极解决办法 #### 知识点解析: **Nutch与Hadoop集成下的recrawl策略** Nutch是一款基于Java的开源搜索引擎框架,能够爬取网页、提取数据并建立索引。它利用Apache ...

    Nutch开源搜索引擎增量索引recrawl的终极解决办法续

    ### Nutch开源搜索引擎增量索引recrawl的终极解决办法续 #### 一、背景与问题概述 在前一篇文章中,我们探讨了Nutch开源搜索引擎在进行增量索引更新(recrawl)时遇到的问题及其初步解决方案。然而,在实际操作...

    nutch分布式搜索索引热替换程序

    2. **增量索引**:Nutch支持增量索引,即只对新抓取或已更改的网页进行索引,而不是重新索引整个数据库。这降低了索引更新的资源需求,并减少了对现有服务的影响。 3. **双写策略**:在热替换过程中,新索引将被...

    nutch开发资料 搜索引擎

    Nutch是Apache软件基金会的一个开源项目,主要用于构建网络搜索引擎。这个开发资料压缩包包含了与Nutch相关的源代码和可能的配置文件,可以帮助开发者深入了解和学习Nutch的工作原理以及如何进行定制化开发。以下是...

    Nutch:一个灵活可扩展的开源web搜索引擎

    Nutch是Apache软件基金会开发的一个开源Web搜索引擎项目,它的设计目标是提供一个可扩展、灵活的搜索解决方案。Nutch不仅能够抓取和索引互联网上的网页,还支持对抓取的数据进行分析和处理,以便为用户提供高质量的...

    nutch-2.1源代码

    Nutch-2.1是Apache Nutch的一个特定版本,它是一个用Java编写的开源搜索引擎软件。这个项目的主要目标是提供一套高效、可扩展的搜索引擎工具,使得用户可以在自己的环境中搭建和运行自己的搜索引擎。Nutch不仅仅是一...

    apache-nutch

    3. **索引优化**:Nutch 提供了多种索引策略,如增量索引、定期全量索引等,以适应不同场景需求。 4. **倒排索引**:Nutch 采用倒排索引结构,快速定位关键词在文档中的位置。 **四、Apache Solr 搜索引擎** 1. **...

    高清彩版 自己动手写搜索引擎

    - **2.2.4 Nutch网络搜索软件**:Nutch是一款开源的网络爬虫项目,用于抓取网页并构建索引,本节介绍其基本使用方法。 - **2.2.5 用户界面**:讨论如何设计友好的用户界面,以便用户更轻松地使用搜索引擎。 - **...

    nutch源码分析

    Nutch是一个开源的Web爬虫项目,主要用于构建搜索引擎。Nutch基于Hadoop框架,能够高效地抓取、索引和搜索互联网上的信息。Nutch的工作流程主要包括以下几个步骤: - **注入(Inject)**:构建初始的URL集合。 - **...

    Lucene in action 2nd(English Edition)

    5. **实时更新与增量索引**:展示了如何在数据变化时实时更新索引,以保持搜索结果的最新性。 6. **多语言支持**:讲解了处理不同语言文本的方法,包括语言识别和特定语言的分析器。 7. **分布式搜索**:详细介绍...

    网站搜索的进化PPT学习教案.pptx

    在此过程中,需要解决自动增量索引、排序和相关度提升、用户行为分析等问题。 5. 搜索网站的进化: 随着时间的推移,搜索引擎发展到全文搜索型,如Google和百度,它们通过网页抓取、分析和索引提供服务。Google的...

    网络爬虫调研报告.docx

    Lucene提供API接口,但仅限于信息的索引和检索,而网络爬虫则负责获取网页内容,将其转化为可供搜索引擎使用的资源。网络爬虫的优化主要集中在如何更有效地利用网络带宽,合理安排网页抓取的时间,以及处理动态网络...

    lucence例子,类似百度搜索

    Lucene支持增量索引和实时搜索,这意味着新添加或修改的文档可以立即反映在搜索结果中。这对于保持搜索引擎的最新状态至关重要。 通过以上步骤,我们可以使用Lucene构建一个功能强大的搜索引擎。当然,实际应用中...

    一个专业搜索公司关于lucene+solar资料(1)

    - 初期以PageRank算法为核心,有效解决了当时互联网搜索引擎的质量问题。 - 随着时间的发展,Google不断改进其搜索引擎技术,成为全球最知名的搜索引擎之一。 **1.2 体验搜索引擎** - **搜索引擎的功能:** - ...

    爬虫技术初探

    Nutch是一个开源的Java搜索引擎,它集成了爬虫(crawler)和搜索器(searcher)两个主要功能。Nutch能够进行网页抓取,并建立索引。它的优点包括基于Lucene的高效索引和检索功能、支持分布式处理以及与Hadoop的紧密...

    大数据中数据采集的几种方式.pdf

    - 深层网络爬虫:抓取传统搜索引擎难以索引的深层网页。 1.3 具体的爬虫工具: - Scrapy:Python编写的强大框架,适用于数据挖掘和信息处理。 - Crawler4j、WebMagic、WebCollector:Java的单机爬虫开源框架,各自...

    分布式网络爬虫的设计与实现应用分析文档.docx

    此外,论文还涉及了Nutch分布式搜索系统的相关研究,这是一个开源的、基于Apache Hadoop的搜索引擎项目,提供了完整的网络爬虫和索引功能,对于理解分布式网络爬虫的实现具有重要的参考价值。 在系统实现部分,文章...

    网络爬虫工具

    - **搜索引擎优化(SEO)**:分析关键词分布,提升排名。 - **市场分析**:监测竞争对手动态,收集消费者反馈。 - **新闻监测**:实时抓取新闻热点,辅助决策。 - **学术研究**:收集大量数据进行文本挖掘或社会...

Global site tag (gtag.js) - Google Analytics