| Lucene基本適用介紹(轉自BlogJava的BlueDavy) |
| 想要找一個(gè)使用Lucene的案例,怎么也找不到,多數都是概念介紹,BlogJava的BlueDavy 老兄的文章不錯,希望以后能自己提供將Lucene整合到自己應用的案例和代碼,塞!這里借花獻佛了! ---------------------------------------------------------------------------------------------------------- 今天用了下Lucene,發(fā)現網(wǎng)上雖然也有不少介紹它的文檔,不過(guò)很多都偏向介紹概念呀、設計或者是一些更為深入的東西,對于其入門(mén)使用的介紹性的文檔并不多,就寫(xiě)了這么一篇。 Lucene基本使用介紹
本文的目的不在于對Lucene的概念和設計這些進(jìn)行介紹,僅在于介紹怎么樣去使用Lucene來(lái)達到自己想要的幾種常見(jiàn)的全文檢索的需求,如果想深入了解Lucene的話(huà)本文不會(huì )帶給你什么收獲的??赐瓯疚暮笙敫钊氲牧私?/span>Lucene請訪(fǎng)問(wèn):http://lucene.apache.org
一. 概述 隨著(zhù)系統信息的越來(lái)越多,怎么樣從這些信息海洋中撈起自己想要的那一根針就變得非常重要了,全文檢索是通常用于解決此類(lèi)問(wèn)題的方案,而Lucene則為實(shí)現全文檢索的工具,任何應用都可通過(guò)嵌入它來(lái)實(shí)現全文檢索。 二. 環(huán)境搭建 從lucene.apache.org上下載最新版本的lucene.jar,將此jar作為項目的build path,那么在項目中就可以直接使用lucene了。 三. 使用說(shuō)明 3.1. 基本概念 這里介紹的主要為在使用中經(jīng)常碰到一些概念,以大家都比較熟悉的數據庫來(lái)進(jìn)行類(lèi)比的講解,使用Lucene進(jìn)行全文檢索的過(guò)程有點(diǎn)類(lèi)似數據庫的這個(gè)過(guò)程,table---à查詢(xún)相應的字段或查詢(xún)條件----à返回相應的記錄,首先是IndexWriter,通過(guò)它建立相應的索引表,相當于數據庫中的table,在構建此索引表時(shí)需指定的為該索引表采用何種方式進(jìn)行構建,也就是說(shuō)對于其中的記錄的字段以什么方式來(lái)進(jìn)行格式的劃分,這個(gè)在Lucene中稱(chēng)為Analyzer,Lucene提供了幾種環(huán)境下使用的Analyzer:SimpleAnalyzer、StandardAnalyzer、GermanAnalyzer等,其中StandardAnalyzer是經(jīng)常使用的,因為它提供了對于中文的支持,在表建好后我們就需要往里面插入用于索引的記錄,在Lucene中這個(gè)稱(chēng)為Document,有點(diǎn)類(lèi)似數據庫中table的一行記錄,記錄中的字段的添加方法,在Lucene中稱(chēng)為Field,這個(gè)和數據庫中基本一樣,對于Field Lucene分為可被索引的,可切分的,不可被切分的,不可被索引的幾種組合類(lèi)型,通過(guò)這幾個(gè)元素基本上就可以建立起索引了。在查詢(xún)時(shí)經(jīng)常碰到的為另外幾個(gè)概念,首先是Query,Lucene提供了幾種經(jīng)??梢杂玫降?/span>Query:TermQuery、MultiTermQuery、BooleanQuery、WildcardQuery、PhraseQuery、PrefixQuery、PhrasePrefixQuery、FuzzyQuery、RangeQuery、SpanQuery,Query其實(shí)也就是指對于需要查詢(xún)的字段采用什么樣的方式進(jìn)行查詢(xún),如模糊查詢(xún)、語(yǔ)義查詢(xún)、短語(yǔ)查詢(xún)、范圍查詢(xún)、組合查詢(xún)等,還有就是QueryParser,QueryParser可用于創(chuàng )建不同的Query,還有一個(gè)MultiFieldQueryParser支持對于多個(gè)字段進(jìn)行同一關(guān)鍵字的查詢(xún),IndexSearcher概念指的為需要對何目錄下的索引文件進(jìn)行何種方式的分析的查詢(xún),有點(diǎn)象對數據庫的哪種索引表進(jìn)行查詢(xún)并按一定方式進(jìn)行記錄中字段的分解查詢(xún)的概念,通過(guò)IndexSearcher以及Query即可查詢(xún)出需要的結果,Lucene返回的為Hits.通過(guò)遍歷Hits可獲取返回的結果的Document,通過(guò)Document則可獲取Field中的相關(guān)信息了。 通過(guò)對于上面在建立索引和全文檢索的基本概念的介紹希望能讓你對Lucene建立一定的了解。 3.2. 全文檢索需求的實(shí)現 索引建立部分的代碼:
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 3.2.1. 對于某字段的關(guān)鍵字的模糊查詢(xún)
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 3.2.2. 對于某字段的關(guān)鍵字的語(yǔ)義查詢(xún)
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 3.2.3. 對于多字段的關(guān)鍵字的查詢(xún)
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 3.2.4. 復合查詢(xún)(多種查詢(xún)條件的綜合查詢(xún))
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 四. 總結 相信大家通過(guò)上面的說(shuō)明能知道Lucene的一個(gè)基本的使用方法,在全文檢索時(shí)建議大家先采用語(yǔ)義時(shí)的搜索,先搜索出有意義的內容,之后再進(jìn)行模糊之類(lèi)的搜索,^_^,這個(gè)還是需要根據搜索的需求才能定了,Lucene還提供了很多其他更好用的方法,這個(gè)就等待大家在使用的過(guò)程中自己去進(jìn)一步的摸索了,比如對于Lucene本身提供的Query的更熟練的掌握,對于Filter、Sorter的使用,自己擴展實(shí)現Analyzer,自己實(shí)現Query等等,甚至可以去了解一些關(guān)于搜索引擎的技術(shù)(切詞、索引排序 etc)等等。 |
聯(lián)系客服