Lucene簡介
1.什么是Lucene
Lucene是一個全文搜索框架,而不是應(yīng)用產(chǎn)品。因此它并不像http://www.baidu.com/ 或者google Desktop那么拿來就能用,它只是提供了一種工具讓你能實(shí)現(xiàn)這些產(chǎn)品。
2.Lucene能做什么?
要回答這個問題,先要了解lucene的本質(zhì)。實(shí)際上lucene的功能很單一,說到底,就是你給它若干個字符串,然后它為你提供一個全文搜索服務(wù),告訴你你要搜索的關(guān)鍵詞出現(xiàn)在哪里。知道了這個本質(zhì),你就可以發(fā)揮想象做任何符合這個條件的事情了。你可以把站內(nèi)新聞都索引了,做個資料庫;你可以把一個數(shù)據(jù)庫表的若干個字段索引起來,那就不用再擔(dān)心因?yàn)椤?like%”而鎖表了;你也可以寫個自己的搜索引擎……
3.Lucene的性能表現(xiàn)
- 測試一:250萬記錄,300M左右文本,生成索引380M左右,800線程下平均處理時間300ms。
- 測試二:37000記錄,索引數(shù)據(jù)庫中的兩個varchar字段,索引文件2.6M,800線程下平均處理時間1.5ms
4.Lucene性能表現(xiàn)好的原因
- 倒排索引
- 壓縮算法
- 二元搜索
5.倒排索引
- 根據(jù)屬性的值來查找記錄。這種索引表中的每一項(xiàng)都包括一個屬性值和具有該屬性值的各記錄的地址。由于不是由記錄來確定屬性值,而是由屬性值來確定記錄的位置,因而稱為倒排索引(invertedindex)
- 單詞-文件矩陣

6.Lucene工作方式
lucene提供的服務(wù)實(shí)際包含兩部分:一入一出。所謂入是寫入,即將你提供的源(本質(zhì)是字符串)寫入索引或者將其從索引中刪除;所謂出是讀出,即向用戶提供全文搜索服務(wù),讓用戶可以通過關(guān)鍵詞定位源
- 寫入流程
源字符串首先經(jīng)過analyzer處理,包括:分詞,分成一個個單詞;去除stopword(可選---就是你想屏蔽的詞)。
將源中需要的信息加入Document的各個Field中,并把需要索引的Field索引起來,把需要存儲的Field存儲起來。
將索引寫入存儲器,存儲器可以是內(nèi)存或磁盤。
- 讀出流程
用戶提供搜索關(guān)鍵詞,經(jīng)過analyzer處理。
對處理后的關(guān)鍵詞搜索索引找出對應(yīng)的Document。
用戶根據(jù)需要從找到的Document中提取需要的Field。
- document
用戶提供的源是一條條記錄,它們可以是文本文件、字符串或者數(shù)據(jù)庫表的一條記錄等等。一條記錄經(jīng)過索引之后,就是以一個Document的形式存儲在索引文件中的。用戶進(jìn)行搜索,也是以Document列表的形式返回。
- field
一個Document可以包含多個信息域,例如一篇文章可以包含“標(biāo)題”、“正文”、“最后修改時間”等信息域,這些信息域就是通過Field在Document中存儲的。
Field有兩個屬性可選:存儲和索引。通過存儲屬性你可以控制是否對這個Field進(jìn)行存儲;通過索引屬性你可以控制是否對該Field進(jìn)行索引。這看起來似乎有些廢話,事實(shí)上對這兩個屬性的正確組合很重要
- 使用Lucene建立倒排索引文件
- 導(dǎo)入lucene 相關(guān)jar包
- 調(diào)用相關(guān)java API生成索引