欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Lucene 3.0的簡(jiǎn)單解析及變化

Lucene 3.0的簡(jiǎn)單解析及變化

lucene3.0 2010-06-15 15:37:43 閱讀79 評論0字號:

一、 概述
      Lucene3.0(以下簡(jiǎn)稱(chēng)3.0)已于2009-11-25發(fā)布,3.0版本是重大的版本,改動(dòng)很大。在A(yíng)PI上做了很多的調整,已經(jīng)刪除了很多之前廢棄的方法以及類(lèi),并支持了很多Java5 的新特性:包括泛型、可變參數、枚舉和autoboxing等。
      因此,此版本和2.x版本不能兼容,如要使用3.0版本,最好是在新項目中去使用,而不是去升級2.x或之前的版本!

二、3.0的變化

1、2.9版本介紹:

      由于新版本變動(dòng)很大,官方是不推薦從舊版本升級到新版本的。因為改動(dòng)會(huì )很大。
      其實(shí)在2.9版本時(shí)改動(dòng)就很大,因為2.9版本就是為3.0做準備的,但是為了向下兼容,2.9并沒(méi)有拋棄之前的舊方法,所以可以直接向下兼容。2.9版本主要是在性能方面的優(yōu)化,包括在Lucene對Lucene底層的內部結構改進(jìn)、索引的管理方式等多個(gè)方面。

1.1、索引文件改進(jìn)
      Lucene的索引數據是存放在獨立的文件中的,這些文件就是存儲著(zhù)索引數據庫一些列分離的“片段”。當我們想索引中增加文檔時(shí),便會(huì )不斷的創(chuàng )建一些可以合并的新片段,因為讀寫(xiě)文件的開(kāi)銷(xiāo)比較大,因此這些字段信息Lucene并非每次都直接加到索引文件里面去,而是先緩存,等到一定量的時(shí)候再一次寫(xiě)到文件中。在2.9以后,Lucene會(huì )為每個(gè)片段分別管理FieldCache以此避開(kāi)跨片段加載FieldCatch的需求,這樣就解決了Lucene跨片段加載FieldCatch的效率很低下問(wèn)題,這個(gè)改動(dòng)大為提高了性能。Lucid Imagination的Mark Miller運行了一個(gè)簡(jiǎn)單的性能測試,表明在5,000,000個(gè)不同字符串下的情況下,Lucene 相對于2.4版本會(huì )獲得15倍左右的性能提高:
Lucene 2.4: 150.726s
Lucene 2.9: 9.695s

1.2 重開(kāi)搜索
      新版本引入了IndexWriter.getReader()方法,它可用于搜索目前完整的索引,包括當前IndexWriter會(huì )話(huà)中還沒(méi)有提交的改變,這帶來(lái)了接近于實(shí)時(shí)搜索的能力。此外,你還可以調用IndexWriter.setMergedSegmentWarmer()方法進(jìn)行“預熱”,這樣那些片斷便可以立即投入使用了。

1.3、數字處理
      2.9版本之前的版本,都是基于文本搜索的,因為對于很多數字的處理方式就很頭疼,例如在我們項目中遇到的很多問(wèn)題都是由于把數字當作了文本處理出現的BUG:
     1、搜索價(jià)格的5,把包含.5的也搜索出來(lái)了;
     2、排序(降序)時(shí),把800排到5000前面;
     ……
     這些都是由于Lucene把所有的都作為文本處理的方式造成的問(wèn)題。Lucene 2.9以后已經(jīng)自帶對數字的處理方式。Field和Query類(lèi)會(huì )采取合適的精度進(jìn)行索引和搜索,這樣大大降低了需要搜索的關(guān)鍵字數量,使查詢(xún)的響應能力得以顯著(zhù)提高。


1.4 其他優(yōu)化
      引入了新的查詢(xún)類(lèi)型和適用性更廣的多關(guān)鍵字查詢(xún)(通配、前綴等等)方式,以及新的針對波斯語(yǔ),阿拉伯語(yǔ)及中文的分析器。此外,這次更新還包括更好Unicode支持,一個(gè)新的查詢(xún)分析框架,以及對地理位置的查詢(xún),它允許根據距離信息對文檔進(jìn)行過(guò)濾和排序(如“找出我家5公里范圍內的所有超市”)。

2、2.9版本和3.0比較
 
雖然2.9是為3.0做準備的一個(gè)版本,但是3.0和2.9相比較,變化還是比較大的,這處要體現在:
1、3.0拋棄了在2.9聲明廢棄的方法,因此3.0無(wú)法向下兼容;
2、3.0放棄了對Java1.4的支持,改為對高版本Java1.5和ant 1.7.0支持;
3、其他內核的一些變化,如oalLock.isLocked()現在會(huì )拋出IOException異常,對于一些靜態(tài)變量的改變等。

3、主要方法的改變
 
這里這種講下目前新版本后使用建立索引以及搜索的不同。

3.1、建立索引
新版本在建立索引時(shí)拋棄了很多未用的方法,見(jiàn)下圖,所有聲明被拋棄的IndexWriter構造函數都在3.0中被刪除。

 


3.0版本的IndexWriter構造函數:

 


在增加索引時(shí),每個(gè)field的常量也有改變,具體如下:

3.0和之前版本的常量修改

  

3.2、查詢(xún)
      刪除了Hits類(lèi),增加了TopScoreDocCollector去取得“Hits”,實(shí)際上在3.0給了個(gè)新命名:collector。使用方式和hits類(lèi)同,同時(shí)刪除了Search以及QueryParser的幾個(gè)構造方法,QueryParser刪除了 QueryParser(String f, Analyzer a)構造方法。
新查詢(xún)例子如下(藍色部分是與以往不同的部分):
view plaincopy to clipboardprint?

 
3.0版本的Search構造方法:

 

 
3.0前的構造方法:

 

 
三、總體圖
      3.0版本的結構和之前的版本(2.9之前)相比,在程序結構上表現出來(lái)就只是多了一個(gè)message包,用來(lái)專(zhuān)門(mén)處理國際化。

 


      見(jiàn)上圖,可以看到,3.0和之前的版本一樣還是由對外接口、索引核心以及基礎結構封裝三大部分共八個(gè)模塊(也即包package),詳細介紹詳見(jiàn)附件一。
我們從上圖也可以看到Lucene搜索時(shí)的調用關(guān)系:當我們要查詢(xún)一個(gè)詞時(shí),在查詢(xún)模塊(search)會(huì )先調用語(yǔ)法分析器(queryParser)對查詢(xún)語(yǔ)句進(jìn)行分析,語(yǔ)法分析模塊調用了詞法分析器(analysis)進(jìn)行詞法分析,如對搜索關(guān)鍵字分詞、過(guò)濾等,詞法分析器在使用時(shí)會(huì )根據實(shí)際情況調用國際化模塊(message)進(jìn)行一些國際化的處理。當這些前置工作做完之后,才真正進(jìn)入到搜索核心,首先會(huì )調用索引模塊(index),它負責向底層的存儲類(lèi)(store)去讀取索引文件里面的數據,然后返回給查詢(xún)模塊。其他模塊在整個(gè)搜索過(guò)程中是作為公共類(lèi)存在的。

附件一、 Lucnen3.0包詳細介紹
 
1、analysis
      Analysis包含一些內建的分析器,例如按空白字符分詞的WhitespaceAnalyzer,添加了stopwrod過(guò)濾的StopAnalyzer,最常用的是StandardAnalyzer。

2、document
      Document包含文檔的數據結構,例如Document類(lèi)定義了存儲文檔的數據結構,Field類(lèi)定義了Document的一個(gè)域。

3、index
      Index包含了索引的讀寫(xiě)類(lèi),例如對索引文件的segment進(jìn)行寫(xiě)、合并、優(yōu)化的IndexWriter類(lèi)和對索引進(jìn)行讀取和刪除操作的 IndexReader類(lèi),這里要注意的是不要被IndexReader這個(gè)名字誤導,以為它是索引文件的讀取類(lèi),實(shí)際上刪除索引也是由它完成, IndexWriter只關(guān)心如何將索引寫(xiě)入一個(gè)個(gè)segment,并將它們合并優(yōu)化;IndexReader則關(guān)注索引文件中各個(gè)文檔的組織形式。

4、queryParser
      QueryParser包含了解析查詢(xún)語(yǔ)句的類(lèi),lucene的查詢(xún)語(yǔ)句和sql語(yǔ)句有點(diǎn)類(lèi)似,有各種保留字,按照一定的語(yǔ)法可以組成各種查詢(xún)。 Lucene有很多種Query類(lèi),它們都繼承自Query,執行各種特殊的查詢(xún),QueryParser的作用就是解析查詢(xún)語(yǔ)句,按順序調用各種 Query類(lèi)查找出結果。

5、search
      Search包含了從索引中搜索結果的各種類(lèi),例如剛才說(shuō)的各種Query類(lèi),包括TermQuery、BooleanQuery等就在這個(gè)包里。

6、store
      Store包含了索引的存儲類(lèi),例如Directory定義了索引文件的存儲結構,FSDirectory為存儲在文件中的索引,RAMDirectory為存儲在內存中的索引,MmapDirectory為使用內存映射的索引。

7、util
      Util包含一些公共工具類(lèi),例如時(shí)間和字符串之間的轉換工具。

8、message
      處理國際化的類(lèi)。

附件二、Lucene相關(guān)名詞解釋?zhuān)ú糠郑?br style="LINE-HEIGHT: 22px"> 
1、IndexWriter
      lucene中最重要的的類(lèi)之一,它主要是用來(lái)將文檔加入索引,同時(shí)控制索引過(guò)程中的一些參數使用。

2、Analyzer
      分析器,主要用于分析搜索引擎遇到的各種文本。常用的有StandardAnalyzer分析器,StopAnalyzer分析器,WhitespaceAnalyzer分析器等。

3、Directory
      索引存放的位置;lucene提供了兩種索引存放的位置,一種是磁盤(pán),一種是內存。一般情況將索引放在磁盤(pán)上;相應地lucene提供了FSDirectory和RAMDirectory兩個(gè)類(lèi)。

4、Document
      文檔;Document相當于一個(gè)要進(jìn)行索引的單元,任何可以想要被索引的文件都必須轉化為Document對象才能進(jìn)行索引。

5、Field
      字段。

6、IndexSearcher
      是lucene中最基本的檢索工具,所有的檢索都會(huì )用到IndexSearcher工具;

7、Query
      查詢(xún),lucene中支持模糊查詢(xún),語(yǔ)義查詢(xún),短語(yǔ)查詢(xún),組合查詢(xún)等等,如有TermQuery,BooleanQuery,RangeQuery,WildcardQuery等一些類(lèi)。

8、QueryParser
       是一個(gè)解析用戶(hù)輸入的工具,可以通過(guò)掃描用戶(hù)輸入的字符串,生成Query對象。

9、Hits
      在搜索完成之后,需要把搜索結果返回并顯示給用戶(hù),只有這樣才算是完成搜索的目的。在lucene中,搜索的結果的集合是用Hits類(lèi)的實(shí)例來(lái)表示的

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
lucene、lucene.NET詳細使用與優(yōu)化詳解
lucene2.0 學(xué)習文檔
用python做一個(gè)搜索引擎(Pylucene)的實(shí)例代碼
Apache Lucene與Lucene.Net——全文檢索服務(wù)器
Web-第二十八天 Lucene&solr使用一【悟空教程】
Lucene 指南--史蒂文 J. 歐文斯
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久