Lucene索引的建立
Lucene索引的建立
Lucene是完全開源的全文搜索引擎,但不是一個(gè)具體的應(yīng)用App.你需要自己進(jìn)行一些搭建。但是基本上函數(shù)類都是已經(jīng)提供好了的。最初是Java版的,但由于lucene的高性能,其他語(yǔ)言也都有相應(yīng)的版本實(shí)現(xiàn)。我也是有幸接觸到了Lucene.說(shuō)實(shí)話,完全是個(gè)小白。完全是自學(xué)之中。由于目前找到的書籍中邱哲、符滔滔、王學(xué)松版<搭建自己的搜索引擎>讀著感覺(jué)寫的很清楚,可惜也是2010年出版的了。里面的lucene談到的也是2.0版。目前的是6.0版。我在這里把一些思想和概念在這里寫出來(lái),只是希望能在此基礎(chǔ)上大家去看那些其他人寫的關(guān)于最新的lucene教程容易些。個(gè)人理解,僅作交流。
1.??????搜索引擎之所以檢索速度快其中一個(gè)因素就是對(duì)索引的建立。就好像書籍的目錄,可以讓我們迅速定位到內(nèi)容。這里引用一張圖說(shuō)明搜索過(guò)程。
從圖中可以很清晰的看到一個(gè)搜索系統(tǒng),三個(gè)部分:收集數(shù)據(jù)整理成索引文檔,這個(gè)過(guò)程多是確定你需要檢索的信息。比如如果你需要檢索圖書館中的書。那么你可能需要把所有檢索書時(shí)可能用到的信息整理出來(lái)包括書名,作者,出版日期,摘要等;建立索引。對(duì)收集的索引信息存入數(shù)據(jù)庫(kù)后我們需要在其上建立索引;搜索服務(wù)。搜索其實(shí)就是檢索建立好索引庫(kù)。大型的公司服務(wù)器每天還都會(huì)自動(dòng)更新索引,以保證用戶檢索信息的實(shí)時(shí)性。這里我們僅談?wù)撍饕慕⑦^(guò)程。
2,索引建立<pre name="code" class="java"> Document bookdoc=new Document();Field bookName=new Field("bookname","鋼鐵是怎樣煉成的",Field.Store.YES,Field.Index.TOKENIZED);Field author=new Field("author","匿名",Field.Store.YES,Field.Index.UN_TOKENIZED);bookdoc.add(bookName);bookdoc.add(author);IndexWriter writer=new IndexWriter(INDEX_STORE_PATH,new StandarAnalyzer(),true);writer.addDocument(bookdoc); writer.close();
上面就是一個(gè)索引地建立過(guò)程。比如我們要檢索一本書的信息。首先我們將獲取的需要檢索的書名、作者信息存入Field類型對(duì)象中,然后將Field對(duì)象加入到Document類型中。Indexwriter是一個(gè)建立索引的工具,利用它對(duì)索引創(chuàng)建。Indexwriter中封裝了許多類和方法。當(dāng)我們將Document類型的數(shù)據(jù)給它時(shí),就是告訴它,對(duì)bookdoc建立索引。
對(duì)于Document和Field的關(guān)系就好像一張表格中的記錄和字段。Document只是表格中的一行,而Field只是一列。
3.參數(shù)解釋
Filed:前兩個(gè)參數(shù)很容易理解,給字段起個(gè)名字,傳入值。第三個(gè)是表示該字段表示完整存儲(chǔ)下來(lái)。通常如果在檢索時(shí)需要完整顯示出來(lái)信息就選Yes。如果該字段僅是書中一段摘要,我們也可以用Field.Store.No.可以看的出Store為Field中的靜態(tài)類。而YES為Store類型的值。同理,后面的參數(shù)表示該字段需要被分詞器切分檢索。對(duì)于作者名字段通常用戶查詢時(shí)需要完整輸入,因此該字段不需要切分。
Document :調(diào)用add()方法,將FIeld加入其中。
Indexwriter:第一個(gè)為索引建立完成后存放的路徑,通常需要捕捉異常即try...catch神馬的。第二個(gè)參數(shù)是指定語(yǔ)言的分詞器實(shí)例,上文用的是StandarAnalyzer。第三個(gè)布爾型值是表式是否將指定路徑下的內(nèi)容清空。通常我們第一次建立索引時(shí)置為true,以后如果只是更新索引應(yīng)該將其置為false。最后關(guān)閉writer.這點(diǎn)需要注意:如果不關(guān)閉會(huì)導(dǎo)致建立的索引數(shù)據(jù)沒(méi)有導(dǎo)入磁盤,數(shù)據(jù)將在緩存中,甚至可能出現(xiàn)鎖定情況。下次在該目錄下將會(huì)發(fā)生無(wú)法加入文件的情況。
這里給出一篇博客的鏈接,寫的是lucene4.0,有興趣可以看一下http://www.cnblogs.com/xing901022/p/3933675.html。
最后再度說(shuō)明,以上內(nèi)容是lucene2.0之前,如果能幫助大家更輕松地看懂其他IT員的博客,那這篇文章就算值了。文章僅為交流,不當(dāng)之處,敬請(qǐng)留言指教。
總結(jié)
以上是生活随笔為你收集整理的Lucene索引的建立的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: WPF界面控件Telerik UI fo
- 下一篇: 2019-10-5 NOIP模拟赛多校联