版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1課程計(jì)1Lucene2Luence實(shí)現(xiàn)全文檢索的流程(重點(diǎn)3、程4Field域(重點(diǎn)56(重點(diǎn)QueryQueryParser78(重點(diǎn)2Lucene介什么LuceneApachelucene可以讓程序員快速開(kāi)發(fā)一個(gè)全文引擎:組工具包:jar全文檢索的應(yīng)用場(chǎng)搜索引站內(nèi)搜索(關(guān)注文件系統(tǒng)的搜總LuceneLucene是一個(gè)工具包,它不能獨(dú)立運(yùn)行,不能單獨(dú)對(duì)外提供服務(wù)。全文檢索的定luence的索引luence的文檔內(nèi)容3Lucene實(shí)現(xiàn)全文檢索的流全文檢索的流程:索程、搜索流索程:數(shù)據(jù)—》文檔處理→到索引庫(kù)Lucene4程需使用lucene完成對(duì)數(shù)據(jù)庫(kù)中信息的索引和搜索功能環(huán)境準(zhǔn)Jdk:1.7Lucene:4.10(4.8jdk1.7及以上數(shù)據(jù)庫(kù):mysql數(shù)據(jù) 初始LuceneLucene是開(kāi)發(fā)全文檢索功能的工具包,使用時(shí)從,并解壓:目前版本地址:JDK要求:1.7以上(4.81.7以下工程搭MysqlysisCoreQueryParserJunit包(非必須索為什么數(shù)格式不同的數(shù)據(jù),需要先將他們到本地,然后統(tǒng)一封裝到lucene的文檔對(duì)象中,也就是說(shuō)需要將的內(nèi)容進(jìn)行統(tǒng)一才能對(duì)它進(jìn)行查詢。數(shù)據(jù)的方對(duì)于互聯(lián)網(wǎng)中的數(shù)據(jù),使用爬蟲(chóng)工具(http工具)對(duì)于數(shù)據(jù)庫(kù)中的數(shù)據(jù),使用jdbc程序進(jìn)行io因?yàn)槟壳八阉饕嬷饕阉鲾?shù)據(jù)的來(lái)源是互聯(lián)網(wǎng)搜索引擎使用一種爬蟲(chóng)程序抓取網(wǎng)((httphtml網(wǎng)頁(yè)信息庫(kù)、xml)solrapache jsoup址、HTMLAPIDOM,CSS Heritrix索引文件的邏輯結(jié)Field(域 Field(域 Field(域 Field(域 Value:77373773737.jpgField(域descriptiondescriptionbooknamebooknamebooknamebookname文檔域的信息就是到的信息,通過(guò)對(duì)象來(lái),具體說(shuō)是通過(guò)對(duì)象中field域來(lái)數(shù)據(jù)。比如:數(shù)據(jù)庫(kù)中一條記錄會(huì)一個(gè)一個(gè)對(duì)象,數(shù)據(jù)庫(kù)中一列會(huì)成field域。 中的field域也不一索引域主要是為了搜索使用的。索引域內(nèi)容是經(jīng)過(guò)lucene分詞之后的倒排索引結(jié)構(gòu)(詞語(yǔ)檔。索數(shù)publicpublicclassBookDaoImplimplementsBookDaopublicList<Book>queryBooks()Connectionconnection=預(yù)編譯PreparedStatementpreparedStatement=ResultSetresultSet= List<Book>list=newtryconnection=DriverManager.getConnection("jdbc:mysql://localhost:3306/solr","root","root");SQLStringsql="SELECT*FROM創(chuàng)建preparedStatement=resultSet=while(resultSet.next()){Bookbook=newBook();}}catch(Exceptione){}return}}創(chuàng)建索創(chuàng)建索程 索 流對(duì)索 流對(duì)除索引操作。IndexWriter需要通過(guò)Directory對(duì)索引進(jìn)行操作。個(gè)抽象類,它的子類常用的包括FSDirectory(在文件系統(tǒng)索引、RAMDirectory(在內(nèi)存索引。publicvoidcreateIndex()throwsException BookDaodao=newBookDaoImpl();List<Book>list=dao.queryBooks();>docList=new;for(Bookbook:list)= //store:如果是yes,則說(shuō) 到文檔域 Fieldid=newTextField("id",book.getId().toString(), Fieldname=newTextField("name",book.getName(), Fieldprice=newTextField("price",Fieldpic=newTextField("pic",book.getPic(), Fielddescription=newTextField("description",book.getDescription(),Store.YES);} yzer=new 創(chuàng)建IndexWriterConfigcfg=newIndexWriterConfig(Version.LUCENE_4_10_3,FileindexFile=newFile("E:\\11-index\\hm19\\");Directorydirectory=FSDirectory.open(indexFile);IndexWriterwriter=newIndexWriter(directory,cfg);for( doc:docList){ }關(guān)閉}分LucenefieldthisisatheLuceneisaJavafull-textsearcha-.areader)ponents ponents(finalStringfieldName,finalfinalStandardTokenizersrc=newStandardTokenizer(getVersion(),reader);TokenStreamtok=newStandardFilter(getVersion(),src);tok=newLowerCaseFilter(getVersion(),tok);tok=newStopFilter(getVersion(),tok,returnnew ponents(src,tok){protectedvoidsetReader(finalReaderreader)throwsIOException{ }}如下是 yzer的部分源碼從一個(gè)Reader字符流開(kāi)始,創(chuàng)建一個(gè)基于Reader的Tokenizer分詞器,經(jīng)過(guò)同一個(gè)域中相同的語(yǔ)匯單元(o)對(duì)應(yīng)同一個(gè)(詞,它記錄了語(yǔ)匯單元的內(nèi)容及所在域的等,還包括來(lái)該on出現(xiàn)的頻率及位置。不同的域中拆分出來(lái)的相同的單詞對(duì)應(yīng)不同的term相同的域中拆分出來(lái)的相同的單詞對(duì)應(yīng)相同的term例如:信息里面,名稱中的java和描述中的java對(duì)應(yīng)不同的luke工具查看索搜索流輸入查詢語(yǔ)sql一樣,lucene全文檢索也有固定的語(yǔ)法:最基本的有比如:AND,OR,NOT等descriptionjavalucene關(guān)鍵字的文檔。它對(duì)應(yīng)的查詢語(yǔ)句:description:javaANDluceneluke代索索 流對(duì)publicvoidindexSearch()throwsException創(chuàng)建query//QueryParserparser=newnewnew ////Queryquery=parser.parse("description:javaAND創(chuàng)建FileindexFile=newFile("E:\\11-index\\hm19\\");Directorydirectory=FSDirectory.open(indexFile);IndexReaderreader=DirectoryReader.open(directory);IndexSearchersearcher=newIndexSearcher(reader);第二個(gè)參數(shù):指定需要顯示的頂部記錄的NTopDocstopDocs=searcher.search(query,intcount=topDocs.totalHits;System.out.println("匹配出的記錄總數(shù)count);ScoreDoc[]scoreDocs=for(ScoreDocscoreDoc:scoreDocs)獲取文檔的intdocId=doc=searcher.doc(docId);System.out.println("商品ID:"+doc.get("id"));System.out.println("商品名稱:doc.get("name"));System.out.println("商品價(jià)格: 地址:"+doc.get("pic"));System.out.println("商品描述:}}FieldField的屬是否分詞是:對(duì)該field的內(nèi)容進(jìn)行分詞,分詞的目的,就是為了索引。否:不需要對(duì)field的內(nèi)容進(jìn)行分詞,不分詞,不代表不索引,而是將整個(gè)內(nèi)容進(jìn)是否索引idfield是否是:將field域中的內(nèi)容到文檔域中。的目的,就是為了搜索頁(yè)面顯示取值用比如:商品名稱、商品價(jià)格、商品id、商品地否:不將field域中的內(nèi)容到文檔域中。不,則搜索頁(yè)面中沒(méi)法獲取該field域多,所以就不需要進(jìn)行。ID去數(shù)據(jù)庫(kù)中查詢,然后顯示出商品描述信Field的常用類FiledFieldFieldNYY或Field用來(lái)構(gòu)建一個(gè)字符串號(hào),號(hào)等)是否在文檔中LongYYY或FieldLong數(shù)是否在文檔中NNYField不分析,不索引,但要Field在FieldValueStore.NO)YYY或Readerlucene猜測(cè)內(nèi)容比較多,Unstored的修改程序的代索引需添加索參考程序的索刪除索IndexWriter根據(jù)條件刪Termsolr中就ID來(lái)進(jìn)行刪除和修改操作的。刪除全修改索搜創(chuàng)建查詢對(duì)象的方QueryluceneQueryParser來(lái)創(chuàng)建查詢對(duì)象(常用lucene通過(guò)Query子類來(lái)創(chuàng)建查詢對(duì)組合關(guān)系代表的意思如下1、MUSTMUST2、MUSTMUST_NOT3、MUST_NOTMUST_NOT4、SHOULDMUSTMUST,SHOULD5、SHOUlDMUST_NOTMUSTMUST_NOT6、SHOULDSHOULDQueryParserquery對(duì)象,可以指定分詞器,搜索時(shí)的分詞器和創(chuàng)建該索引的分參考程序之搜索流程查詢語(yǔ)1、基礎(chǔ)的查詢語(yǔ)法,查詢++2+“:”+[TO最大值]例如:size:[1TO1000]NumericRangeQuery3Occur.MUSTOccur.SHOULD空(不用符號(hào)-(減號(hào)+12例如:+filename:apache+12:必須滿足第一個(gè)條件,忽略第二個(gè)條件例如:+filename:apachecontent:apache12:兩個(gè)條件滿足其一即可。例如:filename:apachecontent:apache4)-121例如:-filename:apache1AND1OR1NOT匹配搜索條件的錄Searchn:indexSearcher.search(query,相關(guān)度排什么是相關(guān)度排相關(guān)度排序就是查詢關(guān)鍵字與查詢結(jié)果的匹配相關(guān)度。匹配越高的越靠前。Lucene是通過(guò)12termterm對(duì)一個(gè)文檔的重要性,就叫詞的權(quán)重。TfDf越高,說(shuō)明詞的權(quán)重越低boost值影響打Boost:值,默認(rèn)是1.0f設(shè)置值可以在創(chuàng)建索引時(shí)設(shè)置,也可以在查詢時(shí)設(shè)置Boost值是Field域上的搜索boostMultiFieldQueryParserboost中文分詞什么是中文分詞比如“我的,分詞:我、的、中國(guó)、、國(guó)人。Lucene自帶的中文分詞 二分法分詞:按兩個(gè)字進(jìn)行切分。如:“我人”,效果:“我是”、“是中”、“中國(guó)”“國(guó)上邊兩個(gè)分詞器需求第中文分詞paoding:庖丁解牛版在https /p/paoding/中最多支持Lucene3.0,且提交的代碼在2008-06-03,在svn中也是2010年提交,已mmseg4j:版已從 /p/mmseg4j/ /chenlb/mmseg4j-solr,支持Lucene4.10,且在中提交代碼是2014年6月,從09年~14年一共有:18個(gè)版本,也就是一年幾乎有3個(gè)大小版本,有較大的活躍度,用了mmseg算法。IK-yzer:版在 /p/ik-yzer/上,支持4.10從2006年12月推出1.0版開(kāi)始,IKyzer已經(jīng)推出了4個(gè)大版本。最初,Luence3.0IKJavaLuceneLucene2012,IKIK也就是201212在更新。 /ansj_segtags僅有1.1版“可能我以后沒(méi)有精力來(lái)ansj_seg了”,現(xiàn)在由”nlp_”管理。2014年11月有更新。并未說(shuō)明是否支持Lucene,是一個(gè)由CRF(條件隨機(jī)場(chǎng))算法所做的分詞 yzer:版在https -yzer/,更新也在2009年5月,源碼,不支持Lucene4.10。是利用HMM(隱鏈)算法Jcseg:版本在git.os .net/lionsoul/jcseg,支持Lucene4.10,作
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/IEC TR 11801-9906:2025 EN Information technology - Generic cabling for customer premises - Part 9906: Balanced 1-pair cabling channels up to 600 MHz for single pair Ethe
- 二零二五版煤炭開(kāi)采權(quán)轉(zhuǎn)讓及安全生產(chǎn)保障服務(wù)合同3篇
- 二零二五年度高速公路交通安全警示標(biāo)志制作合同樣本2篇
- 二零二五版餐飲業(yè)店長(zhǎng)任期管理與聘用合同3篇
- 二零二五版自來(lái)水廠自動(dòng)化控制系統(tǒng)升級(jí)合同3篇
- 二零二五版地鐵停車場(chǎng)車位租賃及公共交通服務(wù)合同2篇
- 二零二五版法院判決引導(dǎo)下的債務(wù)償還與追加借款合同3篇
- 二零二五版地下室出租合同(含倉(cāng)儲(chǔ)物流)3篇
- 二零二五版深基坑降水井施工勞務(wù)分包合同2篇
- 二零二五年果園廢棄物資源化利用合同2篇
- (正式版)QC∕T 1206.1-2024 電動(dòng)汽車動(dòng)力蓄電池?zé)峁芾硐到y(tǒng) 第1部分:通 用要求
- 《煤礦地質(zhì)工作細(xì)則》礦安﹝2024﹞192號(hào)
- 平面向量及其應(yīng)用試題及答案
- 2024高考復(fù)習(xí)必背英語(yǔ)詞匯3500單詞
- 消防控制室值班服務(wù)人員培訓(xùn)方案
- 《貴州旅游介紹》課件2
- 2024年中職單招(護(hù)理)專業(yè)綜合知識(shí)考試題庫(kù)(含答案)
- 無(wú)人機(jī)應(yīng)用平臺(tái)實(shí)施方案
- 挪用公款還款協(xié)議書(shū)范本
- 事業(yè)單位工作人員年度考核登記表(醫(yī)生個(gè)人總結(jié))
- 盾構(gòu)隧道施工數(shù)字化與智能化系統(tǒng)集成
評(píng)論
0/150
提交評(píng)論