• 基于nutch-1.2实现本地搜索引擎


      声明:本博文参考了很多资料,主要来自http://blog.csdn.net/jiutao_tang/article/details/6461884/,http://www.cnblogs.com/xia520pi/p/3615554.html,可以点击这些原文观看

        nutch是Apach开源项目,是由java实现的web爬虫,可以直接抓取网页内容,并使用内嵌的Lucene生成本地检索文件,提供全文索引搜索功能.

        这里在ubuntu14.04系统中,我采用nutch-1.2+Tomcate6.0.53+IKAnalyzer3.2.8+ant+javacc实现本地搜索引擎.

    系统架构:

       

    1.环境配置

        jdk的安装是必须的,这个网上教程很多,不赘述.

        tomcat的安装参考我的另一篇博文:http://www.cnblogs.com/qj4d/p/7222323.html

        nutch的安装也跟tomcat类似,下载nutch1.2后,解压缩,将其/bin目录添加到/etc/profile中,别忘了完成后执行source /etc/profile

    NUTCH_HOME=/home/xxxx/Documents/apache-nutch-1.2
    export PATH=$PATH:$NUTCH_HOME/bin:  

        IKAnalyzer3.2.8下载,这个我是从csdn上下的.

     ant和javacc的安装很简单,直接apt-get install即可.

    2.修改"nutchz1.2/src/java/org/apache/nutch/searcher/Query.java" line 36附近,import异常类:

      org.apache.nutch.analysis.ParseException;

        

       line 454附近,将代码修改为如下的样子:

          

    3.修改"nutch-1.2/src/java/org/apache/nutch/analysis/ NutchAnalysis.jj"

       在NutchAnalysis.jj中找到"| <SIGRAM: <CJK> >",将其修改为:"| <SIGRAM: (<CJK>)+ >"

      

      将NutchAnalysis.jj文件复制到某个目录下,使用javacc命令编译出7个新的java文件,

      

      将这7个新的java文件移动到"/nutch-1.2/src/java/org/apache/nutch/analysis",覆盖原文件.

    4.修改"nutch-1.2/src/java/org/apache/nutch/analysis/ NutchAnalysis.java"文件.

      添加一条Import语句:

      

      并且修改line 50 处开始的两个函数,为他们添加 throw ParseException:

      

    5.修改“nutch-1.2/src/java/org/apache/nutch/analysis/ NutchDocumentAnalyzer.java” .

      添加两个import语句:

      

      修改line105处的函数,将其注释,修改为IKAnalyzer()分词器:

      

    6.修改"/nutch-1.2/build.xml"文件

      在line200行附近添加IKAnalyzer的jar包

      

    7.使用ant执行build.xml文件,可以在/nutch-1.2目录下得到一个新的/build文件目录,将里面的三个文件:nucth-1.2.jar, nutch-1.2.job,nutch-1.2.war

     复制到/nutch-1.2目录下,覆盖原文件

      

    8.在/nutch-1.2目录下新建一个txt文件,用来保存初始搜索的url:

      

    9.修改/nutch-1.2/conf/crawl-urlfiliter.txt文件中的配置,这个文件中的正则表达式定义了那些文件可以被Nutch爬行,那些不可以被爬行。其中以“+”号开头的表示属于Nuch合法的Url连接,“-”号开头相反。由于我的搜索引擎主要专注于历史topic,所以我将ulr控制为与历史相关:

    # accept hosts in MY.DOMAIN.NAME
    #+^http://([a-z0-9]*.)*MY.DOMAIN.NAME/
    +^http://([a-z0-9]*.)*lishi.net/
    +^http://([a-z0-9]*.)*renren.com/
    +^http://([a-z0-9]*.)*qulishi.com/
    +^http://([a-z0-9]*.)*.huanqiu.com/
    +^http://([a-z0-9]*.)*.sohu.com/
    +^http://([a-z0-9]*.)*lssdjt.com/
    +^http://([a-z0-9]*.)*zhihu.com/topic/19551077
    +^http://([a-z0-9]*.)*xuekewang.com/
    

    10.配置/nutch-1.2/conf/nutch-site.xml,填写相关的代理属,我使用http.agent.name,以及配置搜索目录:

    <configuration>
    <property>
    <name>http.agent.name</name>
    <value>HD nutch agent</value>
    </property>
    <property>
    <name>http.agent.version</name>
    <value>1.2</value>
    </property>
     <property>
      <name>searcher.dir</name>
      <value>/home/weichao/Documents/newNutch/nutch-1.2/result</value>
      <description></description>
     </property>
    
    </configuration> 
    

    11.可以开始爬取网页建立索引了

      在/nutch-1.2目录下使用命令:

    bin/nutch crawl /home/weichao/Documents/apache-nutch-1.2/url.txt -dir /home/weichao/Documents/apache-nutch-1.2/search_result -threads 8 -depth 5 -topN 100  

      命令行参数格式:

     Crawl命令的使用说明为: crawl <url dir> [-dir index] [-threads num] [-depth num] [-topN num]
    

      

     urls是存放需要爬行网址的文件夹目录。
     -dir选项是抓取的页面的存放目录。
     -threads选项是启动的最大线程数。
     -depth选项是能爬行的最大深度,也就是最多爬行到第几级的页面,也叫爬行深度。
     -topN选项是在每层深度上,所能爬行的最多页面数,也称爬行广度。      
    

    12.运行结束之后,使用如下命令测试是否有搜索结果,如果total hits为0,则说明没有建立索引,特别要注意第10步添加search.dir:

    /home/weichao/Documents/apache-nutch-1.2/bin/nutch org.apache.nutch.searcher.NutchBean '历史'
    

        

    13.将nutch目录的nutch-1.2.war复制到tomcat/webapps下,启动tomcat,webapps下面自动生成了一个nutch-1.2的文件夹,打开nutch-1.2/WEB-INF/classes下的nutch-site.xml文件,改为以下内容:

    <configuration>
    <property>
    <name>http.agent.name</name>
    <value>HD nutch agent</value>
    </property>
    <property>
    <name>http.agent.version</name>
    <value>1.2</value>
    </property>
    <property>    
    <name>searcher.dir</name>  
    <value>/home/weichao/Documents/newNutch/nutch-1.2/result</value>  
    <description></description>  
    </property>
    <property> 
      <name>plugin.includes</name> 
      <value>protocol-http|urlfilter-regex|parse-(text|html|js)|analysis-(zh)|index-basic|query-(basic|site|url)|summary-lucene|scoring-opic|urlnormalizer-(pass|regex|basic)</value> 
    </property>  
    </configuration> 
    

      特别注意要添加最后一个plugin.includes,否则不会显示搜索结果,tomcat的log也不会报错.

    14.打开"apache-tomcat6.0.29/webapps/nutch-1.2/nutch-1.2/search.jsp",找到"int hitsPerSite",把他的值改为0,避免nutch默认的页面hits有重复

    15.搜索"历史",结果反馈如下图所示,可见中文分词还是比较成功的:

      

     14.

  • 相关阅读:
    Git忽略规则.gitignore梳理
    计算机网络: IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解
    Storm:最火的流式处理框架
    vue-自定义组件传
    HashMap与HashTable的区别
    iOS下JS与OC互相调用(二)--WKWebView 拦截URL
    iOS下JS与OC互相调用(一)--UIWebView 拦截URL
    iOS load和initialize的区别
    iOS下nil 、NULL、 Nil 、NSNull的区别
    iOS正确解决隐藏导航栏后push和pop或dismiss和present闪黑问题
  • 原文地址:https://www.cnblogs.com/qj4d/p/7221746.html
Copyright © 2020-2023  润新知