




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政管理數字化轉型試題及答案
- 2025年市政工程歷史沿革試題及答案
- 行政管理者的創新思維培養試題及答案
- 充電樁建設項目的市場前景與發展策略
- 2025音樂產業報告:版權運營模式創新與科技發展新趨勢分析
- 2025年醫療行業人工智能輔助診斷產品注冊審批流程中的技術標準與規范報告
- 2025年經濟法概論網絡學習試題及答案
- 2025年行政管理考生回顧試題及答案
- 工程管理導論試題及答案探討
- 經濟法概論查缺補漏試題及答案
- 中醫考試題+答案
- (高級)數據安全管理員職業技能鑒定考試題庫-實操題
- 圖書館藏書出入庫管理制度
- 國家開放大學《統計與數據分析基礎》形考任務1-5答案
- 樂山大佛完整版本
- 小型風力發電機并網逆變器設計
- 北京市海淀區2023-2024學年五年級上學期數學期末試卷
- 2024年山東省濟寧市中考生物試題卷(含答案解析)
- 倉庫安全培訓考試題及答案
- 公路工程標準施工招標文件(2018年版)
- 建筑工程一切險保險單
評論
0/150
提交評論