第十五階段lucene技術(shù)筆記_第1頁
第十五階段lucene技術(shù)筆記_第2頁
第十五階段lucene技術(shù)筆記_第3頁
第十五階段lucene技術(shù)筆記_第4頁
第十五階段lucene技術(shù)筆記_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1課程計1Lucene2Luence實現(xiàn)全文檢索的流程(重點3、程4Field域(重點56(重點QueryQueryParser78(重點2Lucene介什么LuceneApachelucene可以讓程序員快速開發(fā)一個全文引擎:組工具包:jar全文檢索的應(yīng)用場搜索引站內(nèi)搜索(關(guān)注文件系統(tǒng)的搜總LuceneLucene是一個工具包,它不能獨立運行,不能單獨對外提供服務(wù)。全文檢索的定luence的索引luence的文檔內(nèi)容3Lucene實現(xiàn)全文檢索的流全文檢索的流程:索程、搜索流索程:數(shù)據(jù)—》文檔處理→到索引庫Lucene4程需使用lucene完成對數(shù)據(jù)庫中信息的索引和搜索功能環(huán)境準Jdk:1.7Lucene:4.10(4.8jdk1.7及以上數(shù)據(jù)庫:mysql數(shù)據(jù) 初始LuceneLucene是開發(fā)全文檢索功能的工具包,使用時從,并解壓:目前版本地址:JDK要求:1.7以上(4.81.7以下工程搭MysqlysisCoreQueryParserJunit包(非必須索為什么數(shù)格式不同的數(shù)據(jù),需要先將他們到本地,然后統(tǒng)一封裝到lucene的文檔對象中,也就是說需要將的內(nèi)容進行統(tǒng)一才能對它進行查詢。數(shù)據(jù)的方對于互聯(lián)網(wǎng)中的數(shù)據(jù),使用爬蟲工具(http工具)對于數(shù)據(jù)庫中的數(shù)據(jù),使用jdbc程序進行io因為目前搜索引擎主要搜索數(shù)據(jù)的來源是互聯(lián)網(wǎng)搜索引擎使用一種爬蟲程序抓取網(wǎng)((httphtml網(wǎng)頁信息庫、xml)solrapache jsoup址、HTMLAPIDOM,CSS Heritrix索引文件的邏輯結(jié)Field(域 Field(域 Field(域 Field(域 Value:77373773737.jpgField(域descriptiondescriptionbooknamebooknamebooknamebookname文檔域的信息就是到的信息,通過對象來,具體說是通過對象中field域來數(shù)據(jù)。比如:數(shù)據(jù)庫中一條記錄會一個一個對象,數(shù)據(jù)庫中一列會成field域。 中的field域也不一索引域主要是為了搜索使用的。索引域內(nèi)容是經(jīng)過lucene分詞之后的倒排索引結(jié)構(gòu)(詞語檔。索數(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)建索程 索 流對索 流對除索引操作。IndexWriter需要通過Directory對索引進行操作。個抽象類,它的子類常用的包括FSDirectory(在文件系統(tǒng)索引、RAMDirectory(在內(nèi)存索引。publicvoidcreateIndex()throwsException BookDaodao=newBookDaoImpl();List<Book>list=dao.queryBooks();>docList=new;for(Bookbook:list)= //store:如果是yes,則說 到文檔域 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的部分源碼從一個Reader字符流開始,創(chuàng)建一個基于Reader的Tokenizer分詞器,經(jīng)過同一個域中相同的語匯單元(o)對應(yīng)同一個(詞,它記錄了語匯單元的內(nèi)容及所在域的等,還包括來該on出現(xiàn)的頻率及位置。不同的域中拆分出來的相同的單詞對應(yīng)不同的term相同的域中拆分出來的相同的單詞對應(yīng)相同的term例如:信息里面,名稱中的java和描述中的java對應(yīng)不同的luke工具查看索搜索流輸入查詢語sql一樣,lucene全文檢索也有固定的語法:最基本的有比如:AND,OR,NOT等descriptionjavalucene關(guān)鍵字的文檔。它對應(yīng)的查詢語句:description:javaANDluceneluke代索索 流對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);第二個參數(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("商品價格: 地址:"+doc.get("pic"));System.out.println("商品描述:}}FieldField的屬是否分詞是:對該field的內(nèi)容進行分詞,分詞的目的,就是為了索引。否:不需要對field的內(nèi)容進行分詞,不分詞,不代表不索引,而是將整個內(nèi)容進是否索引idfield是否是:將field域中的內(nèi)容到文檔域中。的目的,就是為了搜索頁面顯示取值用比如:商品名稱、商品價格、商品id、商品地否:不將field域中的內(nèi)容到文檔域中。不,則搜索頁面中沒法獲取該field域多,所以就不需要進行。ID去數(shù)據(jù)庫中查詢,然后顯示出商品描述信Field的常用類FiledFieldFieldNYY或Field用來構(gòu)建一個字符串號,號等)是否在文檔中LongYYY或FieldLong數(shù)是否在文檔中NNYField不分析,不索引,但要Field在FieldValueStore.NO)YYY或Readerlucene猜測內(nèi)容比較多,Unstored的修改程序的代索引需添加索參考程序的索刪除索IndexWriter根據(jù)條件刪Termsolr中就ID來進行刪除和修改操作的。刪除全修改索搜創(chuàng)建查詢對象的方QueryluceneQueryParser來創(chuàng)建查詢對象(常用lucene通過Query子類來創(chuàng)建查詢對組合關(guān)系代表的意思如下1、MUSTMUST2、MUSTMUST_NOT3、MUST_NOTMUST_NOT4、SHOULDMUSTMUST,SHOULD5、SHOUlDMUST_NOTMUSTMUST_NOT6、SHOULDSHOULDQueryParserquery對象,可以指定分詞器,搜索時的分詞器和創(chuàng)建該索引的分參考程序之搜索流程查詢語1、基礎(chǔ)的查詢語法,查詢++2+“:”+[TO最大值]例如:size:[1TO1000]NumericRangeQuery3Occur.MUSTOccur.SHOULD空(不用符號-(減號+12例如:+filename:apache+12:必須滿足第一個條件,忽略第二個條件例如:+filename:apachecontent:apache12:兩個條件滿足其一即可。例如:filename:apachecontent:apache4)-121例如:-filename:apache1AND1OR1NOT匹配搜索條件的錄Searchn:indexSearcher.search(query,相關(guān)度排什么是相關(guān)度排相關(guān)度排序就是查詢關(guān)鍵字與查詢結(jié)果的匹配相關(guān)度。匹配越高的越靠前。Lucene是通過12termterm對一個文檔的重要性,就叫詞的權(quán)重。TfDf越高,說明詞的權(quán)重越低boost值影響打Boost:值,默認是1.0f設(shè)置值可以在創(chuàng)建索引時設(shè)置,也可以在查詢時設(shè)置Boost值是Field域上的搜索boostMultiFieldQueryParserboost中文分詞什么是中文分詞比如“我的,分詞:我、的、中國、、國人。Lucene自帶的中文分詞 二分法分詞:按兩個字進行切分。如:“我人”,效果:“我是”、“是中”、“中國”“國上邊兩個分詞器需求第中文分詞paoding:庖丁解牛版在https /p/paoding/中最多支持Lucene3.0,且提交的代碼在2008-06-03,在svn中也是2010年提交,已mmseg4j:版已從 /p/mmseg4j/ /chenlb/mmseg4j-solr,支持Lucene4.10,且在中提交代碼是2014年6月,從09年~14年一共有:18個版本,也就是一年幾乎有3個大小版本,有較大的活躍度,用了mmseg算法。IK-yzer:版在 /p/ik-yzer/上,支持4.10從2006年12月推出1.0版開始,IKyzer已經(jīng)推出了4個大版本。最初,Luence3.0IKJavaLuceneLucene2012,IKIK也就是201212在更新。 /ansj_segtags僅有1.1版“可能我以后沒有精力來ansj_seg了”,現(xiàn)在由”nlp_”管理。2014年11月有更新。并未說明是否支持Lucene,是一個由CRF(條件隨機場)算法所做的分詞 yzer:版在https -yzer/,更新也在2009年5月,源碼,不支持Lucene4.10。是利用HMM(隱鏈)算法Jcseg:版本在git.os .net/lionsoul/jcseg,支持Lucene4.10,作

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論