Lucene是apache軟件基金會(huì)4 jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)開(kāi)放源代碼的全文檢索引擎工具包,但它不是一個(gè)完整的全文檢索引擎,而是一個(gè)全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,部分文本分析引擎。Lucene的目的是為軟件開(kāi)發(fā)人員提供一個(gè)簡(jiǎn)單易用的工具包.
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)內(nèi)江,10多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108
粘貼這句話的意思就是想說(shuō)明 Lucene僅僅是一個(gè)工具包,搜索引擎的工具包.
有人會(huì)問(wèn)?Lucene和solr的區(qū)別,solr是一個(gè)搜索系統(tǒng),打個(gè)比方,就如servlet和struts2的區(qū)別 Lucene就是servlet,solr就好比solr,solr封裝了Lucene.
下面說(shuō)說(shuō)Lucene的原理:
我們使用Lucene,其實(shí)使用的是他的倒排查詢
什么是倒排查詢?舉個(gè)例子
新華字典,我們都用過(guò)吧,新華字典分為兩部分,第一部門就是目錄的邊旁部首,第二部分就是正文,一個(gè)一個(gè)字的解釋,
我們?cè)谟眯氯A字典的時(shí)候,一般我們都是通過(guò)邊旁部首找字,沒(méi)有人一頁(yè)一頁(yè)的翻字典找字吧.
Lucene的倒排就是如此,他會(huì)檢索文本,數(shù)據(jù)庫(kù),web網(wǎng)頁(yè),在把內(nèi)容分詞,就像邊旁部首
再次強(qiáng)調(diào)
搜索引擎(百度,谷歌)和lucene的區(qū)別
搜索引擎就是一個(gè)應(yīng)用,lucene就是一個(gè)搜索工具類
name:lucene表示要搜索name這個(gè)Field域中,內(nèi)容為“l(fā)ucene”的文檔。
desc:lucene AND desc:java 表示要搜索即包括關(guān)鍵字“l(fā)ucene”也包括“java”的文檔。
看不懂沒(méi)關(guān)系
我接下來(lái)說(shuō)明Doucment和Field關(guān)系
這里我用數(shù)據(jù)庫(kù)中的一條數(shù)據(jù)說(shuō)明
這一條數(shù)據(jù)就是一個(gè)document文檔
每一個(gè)字段就是一個(gè)Field域
這樣說(shuō)是不是豁然開(kāi)朗了.
接下來(lái),我們說(shuō)說(shuō)分詞器
這個(gè)lucene是外國(guó)人搞得,對(duì)中文的支持不說(shuō)你也知道,不多外國(guó)人也想到這一點(diǎn),"我是中國(guó)人">>我 是 中 國(guó) 人 >> 這樣的效果其實(shí)還不是我們想要的,我們要的是"中國(guó)","國(guó)人"這樣的詞匯,這里我也不打啞謎了,市場(chǎng)上有很多中文分詞器,無(wú)敵的存在我覺(jué)得就是IK了,這是一個(gè)jar包,導(dǎo)入項(xiàng)目即可,說(shuō)他無(wú)敵是因?yàn)樗梢宰约杭釉~,比如"屌絲","高富帥",這也詞,可以自己加到分詞器中,讓程序認(rèn)得.
這就是要用到的包;
ik下載后把這3個(gè)文件也要導(dǎo)入項(xiàng)目中,ext.dic是加詞的,stop是停詞的.
前面的都是Lucece的理論,只有理論搞懂了,下面的代碼實(shí)現(xiàn)過(guò)程也就輕松了
//分詞 testCreateIndex() BookDao bookDao = ListlistBook = List documents = ArrayList<> Document doc = doc.add( TextField("id", String.valueOf(bk.getId()), Store.YES)); doc.add( TextField("name" doc.add( TextField("price" doc.add( TextField("pic" doc.add( TextField("desc" Analyzer analyzer = IndexWriterConfig config = Directory directory = FSDirectory.open( File("H:\\temp" IndexWriter writer = //查 serachIndex() Analyzer analyzer = QueryParser queryParser = QueryParser("desc" Query query = queryParser.parse("desc:java AND lucene" Directory directory = FSDirectory.open( File("H:\\temp" IndexReader indexReader = IndexSearcher indexSearcher = TopDocs topDocs = indexSearcher.search(query, 10 System.out.println("查詢到的數(shù)據(jù)總條數(shù)是:" + ScoreDoc[] docs = docID = Document doc = System.out.println("docID:"+ System.out.println("bookid:"+doc.get("id" System.out.println("pic:"+doc.get("pic" System.out.println("name:"+doc.get("name" System.out.println("desc:"+doc.get("desc" System.out.println("price:"+doc.get("price" }