




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.1课题背景及介绍 11.2课题研究目的及应用 11.3课题研究围 1 22搜索引擎相关理论研究 2.1WEB搜索引擎原理和结构 32.1.1搜索引擎三段式工作流程 32.1.2搜索引擎整体结构 4 52.1.2爬虫的工作流程 52.1.3爬虫的抓取策略 52.1.4数据库的建立 62.1.5数据库的更新 62.3网页预处理 62.3.1建立索引页面库 72.3.2分词 92.3.3倒排索引 2.4查询服务 2.4.1查询方式和匹配 2.4.2结果排序 2.4.3文档摘要 3NUTCH相关框架研究 3.1LUCENE研究 3.1.1Lucene概述 3.1.2Lucene如何对索引进行搜索 3.1.3Lucene增删改索引的API 3.2NUTCH研究 3.2.1Nutch概述 3.2.2研究Nutch的原因 3.2.3研究Nutch的目标 3.2.4Nutch和Lucene比较 3.2.5Nutch常用命令 3.3SOLR研究 3.3.1Solr概述 3.3.3Solr搜索 3.3.4Lucene索引查看工具Luke 3.4HADOOP研究 3.4.1Hadoop概述 3.4.2Hadoop单机本地模式 3.4.3Hadoop单机伪分布式模式 4全文搜索引擎系统分析与技术选型 4.1系统目标需求 4.2系统功能项 4.3可行性分析与决策 4.3.1技术可行性 4.3.2经济可行性 4.4小结 5全文搜索引擎系统设计与实现 5.1系统功能图 5.2系统实体设计 5.2.2实体的属性 5.2.3实体间的联系 5.3系统实现 5.3.1系统需要的环境 5.3.2系统中Nutch的配置 5.3.3对整个网络进行抓取 5.3.4Solr安装配置和使用 5.3.5给Solr4.2添加mmseg4j 5.3.6客户端应用程序的实现 6全文搜索引擎系统评价 6.1系统特色 6.2系统存在的不足和解决方案 6.2.1系统存在的不足 6.2.2改进措施 6.2.3毕业设计心得与收获 搜索引擎就是解决这个问题的最好方法之一。该课题要求设计一个Web应用程序,学习2搜索引擎相关理论研究2.1Web搜索引擎原理和结构图2-1搜索引擎三段式工作流程3.假设分词器和网页排名的计算公式都是html表单以及一些垃圾信息比如广告,网页分析去除这些信息,并抽取图2-2搜索引擎整体结构收集网页的过程如下:从初始URL集合获得目标网页地址,通过网络连接接收网页数爬虫的工作策略一般分为累积式抓取(cumulativecrawling)和增量式抓取证抓取到相当规模的网页集合。但由于Web数据的动态特性,集合中的网页的抓取时间的注入:抓取程序会根据预先提供的URL集分,分数可以影响URL对应主机的搜索排序和采集优先级。接着会判断URL在抓取数据有效更新时间里面,并将URL载入相应的任务组,计算URL的hash值,搜集URL,直至图2-4预处理模块的整体结构缺点,就是不能按照网页URL直接定位到所指向的网页。所以,需要先建立网页的索);等字词,在搜索引擎中是忽略的,所以对于分词后的结果,需),),。图2-8查询服务的整体结构),),序,在Web上做信息检索表现出明显的缺点,需要有其他技术的补充。这方面最重要的文字比较随意,因此从语言理解的角度难以做好;二是复杂的语言理解算法耗时太本章主要介绍了搜索引擎的相关理论。以web搜索引擎为主要介绍对象。首先,从3Nutch相关框架研究.表4-1建立索引publicclassIndexUtil{privateString[]emails={"aasina.","ss88817.","420418858qq.","496008642qq.","ss88817.","ss8817gmail.","fight."};privateString[]contents={"weltosinaaa","howareyouss88817","areyouok496008642","whatareyoudoing,496008642","Haveagoodnight,ss88817.","goodmorning,ss88817"};privateString[]names={"tom","lily","john","jack","mike","bob"};privateDirectorydirectory=null;privateIndexWriterConfigiwc=null;publicIndexUtil(){//directory=FSDirectory.open(newFile("D:\\bs\\lucenetestdir01"));directory=newRAMDirectory();e.printStackTrace();}publicvoidindex(){IndexWriterwriter=null;iwc=newIndexWriterConfig(Version.LUCENE_36,newStandardAnalyzer(Version.LUCENE_36));writer=newIndexWriter(directory,iwc);Documentdoc=null;for(inti=0;i<ids.length;i++){doc=newDocument();doc.add(newField("id",ids[i],Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORM);doc.add(newField("email",emails[i],Field.Store.YES,Field.Index.NOT_ANALYZED));docdoc.add(newField("content",contents[i],Field.Store.NO,Field.Index.ANALYZED));doc.add(newField("name",names[i],Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORM);writer.addDocument(doc);}System.out.println("IndexCreateOK~!");e.printStackTrace();writer.close();e.printStackTrace();System.out.println("IndexWriterCloseError~!");}}Lucene查询服务是根据通过的关键字,从已建立的索引中查询publicpublicvoidquery(){IndexReaderreader=null;reader=IndexReader.open(directory);//通过reader可以获取有效的文档数量//reader.maxSystem.out.println("numDocs:"+reader.numDocs());System.out.println("maxDoc:"+reader.maxDoc());e.printStackTrace();reader.close();e.printStackTrace();System.out.println("IndexReaderCloseError~!");}}表3-3删除、恢复、强制删除索引publicvoiddelete(){IndexWriterwriter=null;iwc=newIndexWriterConfig(Version.LUCENE_36,newStandardAnalyzer(Version.LUCENE_36));writer=newIndexWriter(directory,iwc);writer.deleteDocuments(newTerm("id","1"));System.out.println("Indexwhereid=1deleteok!");e.printStackTrace();writer.close();e.printStackTrace();System.out.println("IndexWriterCloseError~~");}}}publicvoidunewdelete(){IndexReaderreader=null;reader=IndexReader.open(directory,false);reader.undeleteAll();//恢复所有索引System.out.println("AllIndexUndelteOk~~!");e.printStackTrace();reader.close();e.printStackTrace();System.out.println("IndexReaderCloseError~!");}}}}publicvoidforceDelete(){IndexWriterwriter=null;iwc=newIndexWriterConfig(Version.LUCENE_36,newStandardAnalyzer(Version.LUCENE_36));writer=newIndexWriter(directory,iwc);writer.forceMergeDeletes();System.out.println("Indexwhereid=1deleteok!");e.printStackTrace();writer.close();e.printStackTrace();System.out.println("IndexWriterCloseError~~");}}表3-4强制合并索引publicvoidforceMerge(){IndexWriterwriter=null;iwc=newIndexWriterConfig(Version.LUCENE_36,newStandardAnalyzer(Version.LUCENE_36));writer=newIndexWriter(directory,iwc);//会将索引合并为3段,这3段中被删除的数据会被清空//特别注意:此处Lucene在3.5以后不建议使用,因为会消耗大量的开销,Lucene会自动优化writer.forceMerge(3);System.out.println("Indexwhereid=1deleteok!");e.printStackTrace();writer.close();e.printStackTrace();SystemSystem.out.println("IndexWriterCloseError~~");}}}和站点容相关的。因此nutch对学术搜索和政府类站点的搜索来说,是个好选择,因前已经被重新用MapReduce实现了。MapReduce是一个分布式的处理模型,最先是从Google实验室提出来的。并且Nutch也吸引了写你自己的搜索引擎吧。Nutch是非常灵活的:他可以被很好的客户订制并集成到你常见的应用场合是:你有数据源,需要为这些数据提供一个搜…输入:[rootbogonlocal]#bin/nutch图3-2读取连接数据库信息-dump.mop./segments/20130521195147.mop./segments/20130521SegmentReader:dumpsegment:.mop./segmentvi.mop./segments/20130521195图3-4数据段dump后的文件信息-nocontent-nofetch-nogenerate-noparse-图3-5抓取一个的统计信息4.连接数据库信息的读取命令readlinkdb,输入bin/nutchre图3-6运行readlinkdb命令信息图3-7查看数据库dump后的信息送HTTPGET请求即可,然后对Solr返回的信息更重要的是,Solr创建的索引与Lucene搜索引擎库完全兼容。通过对Solr进3.基于开放接口(XML和HTTP)的标准<<add><doc><fieldname="id">TWINX2048-3200PRO</field><fieldname="name">CORSAIRXMS2GB(2x1GB)184-PinDDRSDRAMUnbufferedDDR400(PC3200)DualChannelKitSystemMemory-Retail</field><fieldname="manu">CorsairMicrosystemsInc.</field><fieldname="cat">electronics</field><fieldname="cat">memory</field><fieldname="features">CASlatency2,2-3-3-6timing,2.75v,unbuffered,heat-spreader</field><<fieldname="price">185</field><fieldname="popularity">5</field><fieldname="inStock">true</field></doc><doc><fieldname="id">VS1GB400C3</field><fieldname="name">CORSAIRValueSelect1GB184-PinDDRSDRAMUnbufferedDDR400(PC3200)SystemMemory-Retail</field><fieldname="manu">CorsairMicrosystemsInc.</field><fieldname="cat">electronics</field><fieldname="cat">memory</field><fieldname="price">74.99</field><fieldname="popularity">7</field><fieldname="inStock">true</field></doc></add>solr&start=0&rows=10&fl=*%2表1solr返回的查询报文<<response><lstname="responseHeader"><intname="status">0</int><intname="QTime">6</int><lstname="params"><strname="rows">10</str><strname="start">0</str><strname="fl">*,score</str><strname="hl">true</str><strname="q">content:"facetedbrowsing"</str></lst></lst><resultname="response"numFound="1"start="0"maxScore="1.058217"><doc><floatname="score">1.058217</float><arrname="all"><str>localhost/myBlog/solr-rocks-again.html</str><str>SolrisGreat</str><str>solr,lucene,enterprise,search,greatness</str><str>Solrhassomereallygreatfeatures,likefacetedbrowsingandreplication</str></arr><arrname="content"><str>Solrhassomereallygreatfeatures,likefacetedbrowsingandreplication</str></arr><datename="creationDate">2007-01-07T05:04:00.000Z</date><arrname="keywords"><str>solr,lucene,enterprise,search,greatness</str></arr><intname="rating">8</int><strname="title">SolrisGreat</str><strname="url">localhost/myBlog/solr-rocks-again.html</str></doc></result><lstname="highlighting"><lstname="localhost/myBlog/solr-rocks-again.html"><arrname="content"><str>Solrhassomereallygreatfeatures,like<em>faceted</em><em>browsing</em>andreplication</str></arr></lst></lst></response>图4-8标准分词器分词效果),除和重命名文件或目录的功能。DatanNode存储数据,并提负责处理数据的读写请求。./apache/hadoop/common/hadoop-1.1.2/hadoop-1.1.2.taexportPATH=/home/ysc./apache/hadoop/common/hadoop-1.1.2/hadoop-1.1.2.taexportPATH=/home/hadoop/h<property><name></name><value>hdfs://localhost:9000</value></property><property><name>hadoop.tmp.dir</name><value>/home/hadoop/tmp</value></property>viconf/hdfs-site.xml<property><name>.dir</name><value>/home/hadoop/dfs/filesystem/name</value></property><property><name>dfs.data.dir</name><value>/home/hadoop/dfs/filesystem/data</value></property><property><name>dfs.replication</name><value>1</value></property>viconf/mapred-site.xml<property><name>mapred.job.tracker</name><value>localhost:9001</value></property><property><name>mapred.tasktracker.map.tasks.maximum</name><value>4</value></property><property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>4</value></property><property><name>mapred.system.dir</name><value>/home/hadoop/mapreduce/system</value></property><property><name>mapred.local.dir</name><value>/home/hadoop/mapreduce/local</value></property>4全文搜索引擎系统分析与技术选型4.对于抓取的数据,能够做到数据大小,抓取时6.提供两个查询界面:简单查询界面和暂不提供服务。大体思路是:利用Nutch作为爬虫,抓取信息,将爬行下来的数据提交5全文搜索引擎系统设计与实现图5-2Solr查询返回XML报文格式表5-1相应头实体(ResponseHeader)属性名qtimequerystrString检索状态本次查询所需要的毫秒数用户输入的关键字表5-2相应结果实体(ResponseHeader)属性名numFound本次查找到的记录数查询开始条目的位置表5-2条目实体(Item)属性名sumamaryString文档摘要contentStringStringsegmentString数据段boostString文档摘要MD5值StringurlString连接地址authorList<String>连接下的锚点集合versionString文档版本号表5-4相应头实体(Document)属性名responseHeaderresponseResultResponseHeaderResponseResult响应头实体相应容实体apache.fayea./apache-mirror/lucene/java/4.2.0/luceapache.etoak./nutch/1.6/apache-nutcHadoop-1.2:./apache/hadoop/common/hadoop-1.2.0/hadoop-1.2.0.tacode.google./p/mmseg4j/downloads/list/mmseg4j-1.9.表5-1Nutch安装命令wgetapache.etoak./nutch/1.6/apache-nutch-1.6-src.tar.tarzxvfapache-nutch-1.6wget/rdf/content.rdf.u8.接下来选择这些网页当中随机的一些子集。假设当前的工作目录总是${NUTCH_表5-2预抓取的URL表5-3建立初始URL集合命令表5-5第一轮抓取命令bin/nutchgeneratecrawl2/crawldbcrawl2bin/nutchupdatedbcrawl2/crawldb$s1表5-6第二轮抓取命令bin/nutchupdatedbcrawl2/crawldb$s2表5-7第三轮抓取命令bin/nutchupdatedbcrawl2/crawldb$s3表5-82反转命令 表5-9表5-9将段提交给solr索引的命令表3Nutch与Solr集成命令wgetlabs.mop./apache-mirror/lucene/solr/4.2.0/solr-4.2.0.tgzcp${NUTCH_RUNTIME_HOME}/runtime/local/conf/schema-solr4.xml这里采用mmseg4j-1.9.1这个版本。首先下载分词器mmseg4j-1.9.1,然后将<tokenizerclass="solr.Whites和<tokenizerclass="solr.Stan表5-11为Solr4.2配置分其次mmseg4j命令wgethttps://mmseg4j.googlecode./files/mmseg4j-1.9.1.v20130120-SNunzipmmseg4j-1.9.1.v20130120-SNAPSHOT.zip-dmmse替换以后的空白分词器(WhitespaceTokenizerFactory)和标准分词器表3-124启动Solr并查看web命令表3-135junit测试SolrJ的查询效果代码publicclassSolrTest{privatefinalstaticStringURL="localhost:8983/solr";//1.CreatesolrServerObject//TwoServerObjct:CommonsHttpSolrServer,EmbeddedSolrServerHttpSolrServerserver=null;/***Initthesolrserver.*beforerunthistest,youshouldmakesurethat,solrserverisrunning.BeforepublicvoidstartServer(){server=newHttpSolrServer(URL);}/***thismethodiswrittenfortestingtextQuery.*keyword:猫扑*response:responseHeader(includestatus,QTime,returnTextType,QueryString)*response(includedoc,content,numFound,title,segment,boost,digest,etc..)TestpublicvoidtestQueryText(){SolrQueryquery=newSolrQuery();query.setQuery("title:猫扑");//query.setQuery("content:猫扑贴贴炫图库");QueryResponseresponse=server.query(query);server.setAllowCompression(true);SolrDocumentListdocs=response.getResults();System.out.println("文档个数:"+docs.getNumFound());System.out.println("查询时间:"+response.getQTime());System.out.println("id:"+doc.getFieldValue("id"));System.out.println("name:"+doc.getFieldValue("title"));System.out.println("content:"+doc.getFieldValue("content"));System.out.println("tstamp:"+doc.getFieldValue("tstamp"));System.out.println("anchor:"+doc.getFieldValue("anchor"));System.out.println("");}e.printStackTrace();}}表3-15BasicSelectServlet的实现代码package.bsse.servlet;import.bsse.utils.StaticValues;publicclassBasicSelectServletextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;StaticValuessv=newStaticValues();protectedvoid(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Stringwd=request.getParameter("wd");wd=newString(wd.getBytes("ISO-8859-1"),"UTF-8");Stringcp=request.getParameter("cp");if(cp!=null)icp=Integer.parseInt(cp);Documentdocument=packagingDocument(wd,icp);request.setAttribute("document",document);sv.setIcp(icp);request.setAttribute("sv",sv);request.getRequestDispatcher("selectlist.jsp").forward(request,response);}SuppressWarnings("unchecked")privateDocumentpackagingDocument(Stringwd,inticp){Documentdocument=null;SolrQueryquery=newSolrQuery(wd);query.setStart((icp-1)*10);query.setRows(10);HttpSolrServerserver=newHttpSolrServer("localhost:8983/solr");QueryResponsersp=server.query(query);server.setAllowCompression(true);//setResponseHeaderResponseHeaderheader=newResponseHeader();header.setStatus(rsp.getStatus());header.setQtime(rsp.getQTime());header.setQuerystr(wd);//setResponseResultSolrDocumentListdocs=rsp.getResults();setPage(icp,docs.getNumFound());ResponseResultresult=newResponseResult();result.setNumFound(docs.getNumFound());result.setStart(docs.getStart
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北师大版五年级下册分数加减法简便计算400道及答案
- 微生物对人类健康的影响因素研究试题及答案
- 游艇租赁合同协议
- 赵氏家族离婚合同及财产分割协议
- 事业单位员工合同协议书
- 课题申报书的去向
- 生物安全实验室的建设要求试题及答案
- 幕墙工程承包合同协议
- 特许金融分析师考试相关题目及答案归纳
- 时刻保持学习热情的2025年注册会计师考试复习试题及答案
- 化学反应的限度和化学反应条件的控制 课件
- GA 526-2010监室门
- 精益六西格玛绿带
- 马克思个人介绍
- 全国青少年机器人技术等级考试:二级培训全套课件
- 个体诊所常见违法行为课件
- 工程量清单和招标控制价的编制毕业论文
- 2022年成都市武侯区社区工作者招聘考试笔试试题及答案解析
- 农村常用法律法规知识讲座课件(村干部培训)
- 《中国近现代史》考研题库(浓缩300题)
- 地下车库设计专题 停车位与柱网分析-76p
评论
0/150
提交评论