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

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

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

開(kāi)通VIP
Lucene 指南--史蒂文 J. 歐文斯
Lucene 指南
作者:史蒂文 J. 歐文斯
Jarkarta Lucene(http://jakarta.apache.org/lucene/) 是高性能的,充滿(mǎn)特色的,java語(yǔ)言的,開(kāi)源的文本搜索引擎,由Doug Cutting撰寫(xiě)其應用程序接口。
注意 Lucene 是一個(gè)具體的應用程序接口而不是應用程序。 這意味著(zhù)所有的復雜部份已經(jīng)被完成,留給用戶(hù)您的只是容易的規劃。您需要做的,不是去完成一個(gè)完整的搜尋引擎程序,你只需要花費非常少的時(shí)間通過(guò)一些的選項建立一個(gè)適合您所需要的搜尋程序。你能容易地擴展訂制搜尋程序,使程序完全地符合您的需求。 Lucene 在這方面令人吃驚地容易擴展和使用。
下面介紹的前提是我把您看作是具備基本能力的程序師而且已基本掌握Java。
開(kāi)始使用
這個(gè)指南是一個(gè)簡(jiǎn)述; Lucene 分別有以下四個(gè)類(lèi):
FileDocument IndexFiles SearchFiles DeleteFiles
這些類(lèi)是對該如何使用 Lucene 的非常好的說(shuō)明。如果對當前討論的事物預先有個(gè)大體的模型理解,學(xué)習這些代碼就會(huì )相對比較容易,所以我寫(xiě)了這篇指南,是因為它開(kāi)始看起來(lái)就像原代碼一樣?,F在我可以說(shuō)使用Lucene確實(shí)非常的容易。
概述
我將在我介紹某個(gè) Lucene API名時(shí)不時(shí)的使用斜體字的強調標簽。
以下是用一個(gè)簡(jiǎn)單的圖表表示Lucene的各個(gè)類(lèi)如何組織的:
索引
文檔
字段(名/值   )
Lucene的核心是索引。你將抽去數據進(jìn)入索引,然后通過(guò)檢索索引來(lái)取得搜索結果。為了建立索引,你要建立一個(gè)IndexWriter類(lèi)型的對象。然后使用一個(gè)IndexSearcher類(lèi)型的對象對索引進(jìn)行搜尋。
搜尋本身是一個(gè)使用IndexSearcher.search()執行一個(gè)查詢(xún)Query類(lèi)型的對象。IndexSearcher.search()執行將返回一個(gè)匹配的結果對象,包含了一個(gè)Document類(lèi)型對象的矢量集。
Document對象儲存在索引中,但是他們必須放在索引中的一些特定點(diǎn),那是你需要做的。你必須選擇哪些數據進(jìn)入, 并把他們轉換成文檔。你讀取每筆由文件抽象成的數據文件 ( 可以是通過(guò)數據庫進(jìn)入, 或是任何其他方式), 將這些大塊數據分解儲存為字段格式的對象(名/值)。當你構造完一個(gè)文檔,使用IndexWriter將它加入索引。
查詢(xún)需求可能相當復雜,因此,Lucene包含一個(gè)幫助產(chǎn)生查詢(xún)對象的工具,稱(chēng)做QueryParser。QueryParser帶有一個(gè)查詢(xún)字符串,它就像你使用一個(gè)英特網(wǎng)搜尋引擎時(shí)輸入的字符串, 產(chǎn)生一個(gè)查詢(xún)Query類(lèi)型的對象。
注意:有時(shí)常出現gotcha(口語(yǔ)I have got you) ,因此,雖然它只是很低級的細節問(wèn)題,我還是要在這里提到它。它起一個(gè)分析器的作用。Lucene對全文檢索,第一步的一個(gè)步驟將清掃全文。你在這時(shí)會(huì )使用到一個(gè)分析器——它將消除標點(diǎn)和常用無(wú)意義的虛詞(the, a, an等等)。Lucene 提供多種不同的分析器,并且你完全可以構造自己的分析器, 但是BIG GOTCHA能持續正常運行的前提是你必須在分析索引和搜索時(shí)使用相同的分析器。
你注意到上方?jīng)]有的東西嗎? Lucene處理索引,查詢(xún)和反饋,但是它不處理:
管理進(jìn)程(實(shí)例化對象并將他們連接在一起,在索引和搜索時(shí))
·              選擇數據文件
·              剖析數據文件
·              從用戶(hù)取得檢索字符串
·              向用戶(hù)返回查詢(xún)結果
那些未處理的部分是你需要完成的。在 Lucene contrib 你可以取得一些對您有幫助的工具和很好的范例,但是通常 Lucene 集中在完成索引和搜索, 其他的由你完成。 (因此你能構造相應的檢索來(lái)滿(mǎn)足你需求的方案)
我假定Lucene用于命令行驅動(dòng)或網(wǎng)絡(luò )驅動(dòng)。我上文中的范例代碼是通過(guò)命令行驅動(dòng)的可查詢(xún)的食譜數據庫。以后我會(huì )再寫(xiě)關(guān)于如何使用網(wǎng)絡(luò )驅動(dòng)的Lucene應用程序并且把它作為例子加入這個(gè)指南文章。
不要自作聰明
你將會(huì )注意這是一個(gè)很平常的主題。如果你展開(kāi)lucene用戶(hù)列表而且聽(tīng)到Doug Cutting的解答,你會(huì )發(fā)現那個(gè)相同的主題。那一個(gè)主題是不要自作聰明, 你已具備足夠的聰明來(lái)進(jìn)行快速索引和搜索。這雖不能說(shuō)它總是擅長(cháng)使用暴力方法,但是在 Lucene 中,如果有一個(gè)簡(jiǎn)單的解法,那樣或許作最大多數的感覺(jué)。記住Knuth的話(huà): " 早期的最佳化是從源頭就孕育罪惡".
構造索引或搜索
開(kāi)始,你要抽取數據導入搜索程序之內(構造索引)或把數據從搜索程序中取出來(lái)(搜索).
我會(huì )詳細察看這些類(lèi)的次序,你將在范例源文件中遇到他們。好吧, 準確的說(shuō), 我將按照數據的順序跟隨瀏覽它們,即按照搜索請求從輸入文件到輸出文件。
如果你不確定你是否達到這種程度的認識, 建議看一看我的文章《核心概述》。
深度的索引
您通過(guò)建立字段型文檔(由名/值 的對組成)產(chǎn)生索引,并將它們導入IndexWriter抽取其中的字段值而產(chǎn)生一個(gè)索引。
文檔對象
Lucene不對文件編索引,它只對文檔對象編索引。將其編入索引中然后從中搜尋文件, 你首先需要將這些文件轉化為文檔對象。
文檔對象是一個(gè)字段對象的集合(名/值 對)。因此,對于每個(gè)文件,首先將其轉化為一個(gè)文檔,然后將其置入相應的字段。
這是最開(kāi)始的高明之處, 取決于你給什么類(lèi)型的文件建立索引,那些文件由多少數據構成, 以及多少種結構需要保存。 Lucene 僅僅處理名/值 對。電子郵件, 舉例來(lái)說(shuō), 主要的名/值有:
發(fā)送到: fred
發(fā)送自: barney
主題: 晚餐?
正文: 讓我們今晚共聚晚餐!
對于比較復雜的文件,你必須將那些結構化簡(jiǎn)為一組組名/值的字段。
順便一提,我所說(shuō)的雖然名為" 文件 ",但它數據源可以是任何東西——一個(gè)非常大的文件塊,一組SQL查詢(xún)的返回結果集,或是僅僅來(lái)自電子郵件的某條信息。
一個(gè)最小的標準的 Lucene 范例將是如下結構:
字段包含的內容
將會(huì )使用于場(chǎng)合
原始的文檔路徑
在檢索之后把這些原始文檔遞交給實(shí)際用戶(hù)
修改日期
與原始的文件修改日期相比較, 看看是否需要將它重新編入索引
文件的內容
搜索的目標
注意:這里只是舉一個(gè)例子,并不是必須這樣做。舉例來(lái)說(shuō),如果你沒(méi)有修改日期字段,沒(méi)有什么關(guān)系,你只需要每次都對你的所有文件重建索引。(并且事實(shí)上,那是重建索引時(shí)推薦的標準方案, 在"不要自作聰明"的經(jīng)驗法則之下)
全字段
你也許想過(guò)將所有字段的內容干脆就合并在一起然后將它們整個(gè)兒保存在一個(gè)“全文”字段。 這是最容易的構造方法,這樣你的用戶(hù)能一次就搜尋他們想查找的所有的字段。是的,你可以提出一個(gè)復合方案重構用戶(hù)的查詢(xún)需求,如此它將對所有已知字段檢索, 但是注意確保它夠簡(jiǎn)單。
目錄對象
你可以將一個(gè)索引保存在一個(gè) Lucene 目錄對象中。Lucene目錄是一個(gè)Java文件系統抽象類(lèi)。目錄類(lèi)使Lucene中具體類(lèi)的行為隱藏。它讓你只需要關(guān)注那些背后的事情,例如將文件暫存在內存中(Lucene受兩個(gè)目錄類(lèi)影響, 為了保證高效執行,其一基于文件,另一則基于隨機存取儲存器)
分析器和分解器
分析器的工作是將字符串分解成斷文流的形式。通過(guò)字符串中的常用字進(jìn)行分解,那便是索引中所保存的內容(連同位置和其他的細節一起)。
每個(gè)分析器包含一個(gè)或多個(gè)的分解器而且可能包括過(guò)濾器。分解器按照日常規則將整個(gè)文章分解成一個(gè)個(gè)詞。過(guò)濾器用在分解器之后完成剩下的工作。
Lucene 提供了一個(gè)分析器的抽象類(lèi),以及三個(gè)分析器的實(shí)現類(lèi)。讓我們具體看看:
簡(jiǎn)單分析器
簡(jiǎn)單分析器僅僅使用分解器將所有的輸入分解
斷詞分析器
斷詞分析器包括基本分解,以及包含任何“斷詞”的過(guò)濾器。斷詞就相當與一些無(wú)意的虛詞(a, an, the),它們在英語(yǔ)中出現的過(guò)于頻繁,完全是檢索中的額外無(wú)用的部分。斷詞分析器內置了一系列的這種無(wú)用的詞,當然你也可以自己定義。
標準分析器
標準分析器完成以上兩者所有的功能,此外還對無(wú)用的字符進(jìn)行基本的清理。例如將無(wú)意義的分隔符刪除(就像" T.L.A." 變成 " TLA")
這些分析器是英語(yǔ)專(zhuān)用的。Lucene的用戶(hù)已經(jīng)擴展了許多其他語(yǔ)言的分析器。在Lucene Sandbox里可以找到。如果你找不到你所用語(yǔ)言的分析器,你甚至可以自己擴展相關(guān)語(yǔ)言分析器。當你在學(xué)習的時(shí)候,使用簡(jiǎn)單分析器即可。
深度的搜索
為了實(shí)際的搜索,你需要一個(gè)索引搜索器IndexSearcher,但我們待會(huì )才講到那兒; 在你之前你必須為索引搜索器提供一個(gè)查詢(xún)體。索引搜索器并不直接通過(guò)索引檢索,而是通過(guò)查詢(xún)體進(jìn)行的。
查詢(xún)和查詢(xún)解析器對象
當你把用戶(hù)的參數字符串遞交給QueryParser.parse(),你將得到一個(gè)查詢(xún)體, 包括一個(gè)默認的檢索字段 (如果用戶(hù)不明確指出檢索字段) 和一個(gè)分析器。 這個(gè)分析器是一個(gè)用來(lái)分解用戶(hù)傳入的參數的查詢(xún)解析器。Gotcha 警告:再一次注意,你必須確定分解參數和分解索引時(shí)你使用的是相同類(lèi)型的分析者。斷詞分析器或許一個(gè)安全的選擇, 因為在范例代碼中就時(shí)使用這個(gè)分析器。QueryParser.parse()的返回值為一個(gè)查詢(xún)體對象。
查詢(xún)解析器有一個(gè)parse()的靜態(tài)方法,我猜那是為了方便起見(jiàn)。你可以用一個(gè)分析器以及默認字段的字符串來(lái)實(shí)例化一個(gè)查詢(xún)解析器。 然而, 注意查詢(xún)解析器QueryParser不是線(xiàn)程安全的,因此每一個(gè)線(xiàn)程必須有它自己的查詢(xún)解析器。
索引檢索器
得到索引檢索器的一個(gè)簡(jiǎn)單實(shí)例僅需要告訴Lucene一個(gè)參數,使它知道到哪取得這個(gè)存在的索引。這個(gè)參數可以是以下兩種類(lèi)型之一:
·              包含文件的路徑的字符串
·              一個(gè) Lucene 目錄類(lèi)型的對象 (見(jiàn)"深度的索引")
復合索引
如果對單一索引進(jìn)行檢索,你將對單個(gè)索引使用索引檢索器。如果需要在多個(gè)索引之間檢索,你就要對每個(gè)索引建立索引檢索器實(shí)例,并構造一個(gè)數組,將這些實(shí)例添加進(jìn)數組中,然后將這個(gè)數組作為參數構造一個(gè)復合搜索器。
檢索
為了實(shí)際的搜索,你要把用戶(hù)輸入的字符串參數傳遞給查詢(xún)解析器( 而且記得 (第三次強調) 此處的查詢(xún)解析器必須與你構造索引時(shí)使用同種類(lèi)型的;查詢(xún)解析器將調用分析器來(lái)分解字符串參數)并返回一個(gè)解析過(guò)的查詢(xún)體對象。
然后你把這個(gè)解析過(guò)的查詢(xún)體對象交給IndexSearcher.search()執行。它將返回一個(gè)查詢(xún)命中目標的對象,這個(gè)命中對象是一個(gè)匹配的文檔的集合。
命中
IndexSearcher.search(query)將返回一個(gè)命中對象, 它是一個(gè)矢量Vector,包含一系列Lucene文檔對象的列表,即是和你傳給IndexWriter相同的那些文檔對象?,F在,為了顯示結果你必須對這個(gè)命中對象格式化, 或者產(chǎn)生指向原始文件所在的超鏈接,或者你必須對查詢(xún)結果有個(gè)基本的處理計劃。
這里沒(méi)有提到的問(wèn)題
這里沒(méi)有提及一個(gè)Lucene項目需要包含哪些類(lèi),或是在上文中順帶提及。畢竟,這篇指南并不是要把所有的問(wèn)題全部討論, 否則的話(huà),我只需要簡(jiǎn)單的讓大家看源代碼算了。
我強烈推薦大家首先邊看這篇指南邊分析提供的演示范例程序。然后,重復一次,。這一次當范例代碼中調用Lucene類(lèi)時(shí),你再去查看Lucene的類(lèi)的源代碼看看它們究竟如何實(shí)現功能的。這不只是學(xué)習Lucene的一個(gè)好方法,這也是學(xué)習更多有關(guān)編程的一個(gè)優(yōu)秀的方法。
后文
下面我們將繼續我們的進(jìn)程,實(shí)際的寫(xiě)一個(gè)檢索程序的例子,構造索引并在上面進(jìn)行檢索。
在那之后,我們將真正的使用servlets和JSP建立一張網(wǎng)頁(yè)搜索引擎的基本頁(yè)面。我們已經(jīng)看到Lucene是多么容易上手,而且servlet/ jsp的應用也不難(除非你自己想要搞復雜, 當然這是可能的)。今后也將介紹多線(xiàn)程的Lucene的相關(guān)問(wèn)題問(wèn)題。我們如此幸運Lucene真的是那么那么的簡(jiǎn)單易用, 因為大部分甚至所有的Lucene主類(lèi)是線(xiàn)程安全的。
史蒂文 J. 歐恩,版權所有的版權 2001。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
lucene入門(mén)與使用
Lucence的結構 - neuron - 計世博客
影響Lucene索引速度原因及提高速度技巧
影響Lucene索引速度原因以及提高索引速度技巧[轉]
翻譯:如何提高和優(yōu)化Lucene索引速度
Lucene 3.0的簡(jiǎn)單解析及變化
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

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