zoukankan      html  css  js  c++  java
  • 菜鸟也想玩搜索引擎——JobSearch简介 (转)

      这一篇将简要介绍一下JobSearch的结构,同时发下源码,来点干货,等过两天闲的时候将围绕这个程序简单介绍搜索引擎的各部分,同时谈谈个人的一些理解。程序写的比较简单,基础好的话很容易就能看懂(因为写的比较早,所以代码比较乱,还望各位勿喷啊)。

      SVN地址:http://code.taobao.org/svn//jobsearch/trunk

      源文件下载地址:https://files.cnblogs.com/good-temper/jobsearch.rar

    1、程序结构

      程序框架如下:

      

         (1)、爬虫从招聘网站通过列表页抓取招聘页面,将招聘信息解析出后存入数据库

         (2)、通过Luence实现的索引器存数据库读取解析出来的信息,进行分词并建立索引文件

         (3)、用户输入关键词提交给查询器

         (4)、查询器将关键词分词并检索索引文件,获得匹配的记录集合,根据记录的id查询数据库取出数据反馈给用户。(这里偷了个懒,建立索引是直接将数据表所有字段都存进了索引文件,这样查询时就不需要读取数据库了,但是这是一个非常糟糕的设计,原因以后详细分析时会说明)

      程序的源文件结构如下:

    复制代码
    //需要说的是部分文件是从更早期的一个爬虫程序里边拷贝过来的,原项目是gbk的,而本项目是utf-8的,所以有部分中文注释乱码,而且一些文件没有用到 JobSearch   com.crawler.action               //这个就不解释了,struts你懂得   com.crawler.analysis              //解析包,本来想用htmlparser,后来觉得挺简单的就直接自己写正则了         ContentAnalysis.java          //内容页解析类         ListAnalysis.java            //列表页解析类   com.crawler.contraller             //控制包         Contraller.java             //总控类,所有抓取爬虫都在此启动         job51Contraller.java          //51Job的抓取控制类,主要是启动多个线程进行抓取,并维护一个链接队列进行任务调度   com.crawler.database              //数据库操作         MysqlOperater.java            //mysql操作类         SqliteOperater.java            //sqlite的操作类,我自己写的小程序喜欢用sqlite,轻量级且方便移植。这里本来打算用的,最后因多种原因未使用。   com.crawler.entity               //实体类,当时百度出的这个单词......好吧,今天知道人们其实更喜欢写成model         Queue.java                //队列接口         ArrayQueue.java             //队列类,为甚么要自己实现?因为当时不知道java已经实现了Queue,就在网上考了一个,当然看了下代码其实很简单,使                               用了模板,而且线程安全         SearchResult.java            //查询结果类         SimpleContent.java            //简单格式的置为内容类,这个......我也忘了当时为啥要定义这个,难道想减少客户端请求时传递的信息量?         PageContent.java             //页面内容类,用来存储页面解析后的信息         UrlInfo.java               //Url信息类  com.crawler.filter                //本来打算实现过滤器的,实现链接的滤重,但是最后偷懒直接比对的数据库,就没实现。这个之前实现过,采用的Bloom Filter                             实现,之后细讲会讲到的  com.crawler.htmlop                //html操作         GetHtml.java               //请求网路获取html文件  com.crawler.io                  //io操作         FileOperater.java            //主要将html文件保存至本地,这里没有用到,但是这样做对于一个真正高校的搜索引擎其实  com.crawler.luence                //luence操作         InfoIndex.java              //索引文件操作类,建立、更新、查询索引都在这里边,其实包含了索引器和查询器,这里代码写的有点烂。  com.crawler.tool                 //一些工具类         ComputeMD5.java              //生成MD5值,最为数据主键         DataOp.java                 //日期格式处理         PropertiesOp.java             //读取配置文件属性,爬虫的一些信息通过.properties文件配置,包括爬去列表页起始地址、列表链接正则、爬去分类等                                ,这样做主要是希望增强可拓展性,之后通过添加XXXContraller类和配置文件就能实现对新网站的爬去(这样其实还是                                                      有缺陷) //最后,应该是controller,而不是contraller,好吧,没文化真可怕。
    复制代码

    2、如何配置程序

      2.1 导入项目

        可以svn签入或者下载源文件导入,我用的myeclipse9.0,但是开发用的myeclipse8.5,所以8.5以上版本应该都行。

      2.2   初始化数据库

        脚本文件在sql文件加下,里边已经有一些数据,但是建议把数据清空(因为对应没索引文件没拷,这些数据也查询不出来)。

      2.3   抓取数据

        运行程序,将程序部署至tomcat,打开:http://localhost:8080/JobSearch/index.jsp

        点击右上角的“抓取设置”,按照下图执行点击1、2,暂时不要执行3。

        这是可以在控制台看到输出抓取日志信息:

      2.4  对抓取信息建立索引

        在抓取了一段时间后(可以看看数据库,差不多positioninfo表有个千吧条信息时,反正是测试下,用不着抓太多),点击上边的3开始建立索引。这里需要提到是由于代码对异常处理的有问题,长时间运行后会出现异常信息,一般情况下忽略即可(比如一些链接请求失败很正常),但是有时候你会发现列表页解析速度很快,内容页个很长时间才完成一个,这个一般重启即可,不必担心重复抓取,抓取状态数据库保存的有。

        建立索引将是个很长的时间,而且建议在抓取停止后在去建立索引(怎么停止?这个....没写,直到列表信息抓取完就停止了,或者你重启下tomcat也行,反正是个练手项目,也不追求十全十美......),否则很可能你等很长时间也不见结束。

      2.5  万事具备,搜索吧

        打开主页,填写关键词(最好和抓取分类相关)和条件,点击搜索,会惊喜的发现页面显示了搜索结果。但是同时你也可能会小小的失望:有时候搜索结果准确度并不是那么高。这个主要和分词器以及luence的使用有关,因为我只是简单的使用了下,并未做相关排名,而且分词器分词不一定准确(这个牵扯很多原因,也是搜索引擎需要解决的核心问题之一,以后我会说下我所了解的解决思路)。

      最后来几张效果图,然后睡觉去。

        

         

     
     
  • 相关阅读:
    跳表实现
    剑指OFFER24-反转链表
    java常用的明文加密算法
    创建 Java 第三方类库,以及制作类库的Javadoc
    java 中的正则表达式
    JDK、JRE、JVM 关系
    java 编译运行过程
    为什么要配置环境变量
    搭建 java 开发环境
    idea 设置
  • 原文地址:https://www.cnblogs.com/xly1208/p/3011626.html
Copyright © 2011-2022 走看看