一.概述:
1.1 什么是Lucene4
1.2 全文檢(jian)索(suo)系統的結(jie)構
1.3 Lucene4能做什么
1.4 為什么使用(yong)Lucene4
1.5 Lucene4只關注(zhu)文(wen)本的索(suo)引和搜索(suo)
1.6 索引庫結構—倒排序索引
1.7 基(ji)于Lucene4的搜索(suo)程序例子(zi)
1.8 Nutch
Nutch是一個開源Java實現的搜(sou)(sou)索(suo)(suo)引擎。它提供了我們(men)運行自己的搜(sou)(sou)索(suo)(suo)引擎所需的全(quan)部工具。包括全(quan)文搜(sou)(sou)索(suo)(suo)和Web爬蟲(chong)。
1.9 開(kai)源(yuan)搜(sou)索引擎(qing)列表(biao)
JXTA Search是一個分(fen)布式的搜索(suo)系統.設計用在點對點的網絡與網站(zhan)上.
Carrot2是一(yi)個開(kai)源(yuan)搜索結果分類(lei)引擎。它能(neng)夠自動把搜索結果組(zu)織成一(yi)些專題分類(lei)。
?MG4J可以讓你為大量的(de)文檔集合構建(jian)一個被壓(ya)縮的(de)全(quan)文本(ben)索(suo)引,通過使內插(cha)編碼(interpolative coding)技術.
1.10 全球(qiu)商用搜索(suo)市場(chang)
在全球(qiu)商用搜索市場上,Autonomy是老大!Autonomy的(de)市值不(bu)足(zu)Google的(de)零(ling)頭,而Google在這一(yi)市場的(de)份(fen)額也不(bu)足(zu)Autonomy份(fen)額的(de)零(ling)頭.
1.11 幾(ji)種常見的(de)基于(yu)Lucene4的(de)開(kai)源(yuan)搜索解決方案對比
Solr Cloud;Solandra = Solr + Cassandra ;HBasene(Lucene+HBase)
1.12 Lucene4倒排索引原理
1.13 Lucene4基本開發(fa)環(huan)境配置-樣例項目概覽
1.14 快速瀏覽(lan)demo
?
二、Lucene系統架構?
2.1 Lucene4系統結(jie)構
2.2 Lucene4包(bao)結構功(gong)能表?
2.3 Lucene4的主要邏輯圖(tu)?
2.3.1 查詢邏輯
2.3.2 入庫(ku)邏輯(ji)
2.4 理解核心索引類(lei)?
2.4.1 IndexWriter
2.4.2 Directory
2.4.3 Analyzer
?2.4.4 Document
2.4.5 Field
2.5 靜態內部類
Field.Store ?表示Field的(de)存儲(chu)方式
2.6 關于Field的重要(yao)說明
org.apache.lucene.document.StringField ??A field that is indexed but not tokenized: the entire String value is indexed as a single token.
org.apache.lucene.document.TextField ? ? ?A field that is indexed and tokenized, without term vectors. For example this would be used on a 'body' field, that contains the bulk of a document's text.
org.apache.lucene.document.BinaryDocValuesField ??The values are stored directly with no sharing, which is a good fit when the fields don't share (many) values, such as a title field. If values may be shared and sorted it's better to use?SortedDocValuesField.?
2.7 項目實戰(zhan)動手演練
?
三、 Lucene索引里有什么
什(shen)么是索引(yin) index
Lucene索引(yin)的術(shu)語定義
倒排索引(inverted indexing)
Fields的種類
片斷(duan)(segments)
文檔編(bian)號(document numbers)
索引結構概述
Lucene src自帶樣(yang)例代碼
Lucene索(suo)引的目錄結(jie)構
?
四、Lucene索引深入
4.1 Lucene4索引的目錄結構
4.2 索(suo)引文件后綴名(ming)說明(ming):segments.gen, segments_N;write.lock;.si;.cfs, .cfe ;.fnm;dex .fdx;.fdt;.tim;.tip;.doc;.pos;.pay;.nvd, .nvm;.dvd, .dvm;.tvx;.tvd;.tvf;.del
4.3 當前(qian)版本索引的限制(zhi):Lucene的當前(qian)實現索引中使(shi)用Java語言(yan)中的 int 對term詞典計數(shu)。所以單(dan)個(ge)索引片(pian)段文件中詞典大(da)的數(shu)目為: ~2.1 billion ?(約21億) ?X ?索引片(pian)段文件大(da)個(ge)數(shu)(128)
故 能索引的(de)詞典大數(shu)目為: ~274 billion (約(yue)2740億(yi))
這個限制不是索(suo)引文件格(ge)式造(zao)成(cheng)的,是采用當前java實現版(ban)本造(zao)成(cheng)的。(This is technically not a limitation of the index file format, just of Lucene's current implementation.)
同理:也是(shi)使(shi)用int 對document文檔源計數的。并且索引文件格式也是(shi)采用的?Int32?在硬盤(pan)上存儲(chu)document文檔號的。這個限制(zhi)即是(shi)實(shi)現版本也是(shi)索引文件格式的限制(zhi),后續可能會改為(wei)?UInt64?或?Vint 更好就沒(mei)限制(zhi)了。
4.4 索引(yin)文件可放的位置(zhi)
內存,硬盤
?
五、 Lucene索引深入優化
5.1 索引的合并
實際代碼實戰
5.2 索引優化(hua)的部(bu)分技巧
重用(yong)Document和Field實例
使用按照內存消耗Flush代(dai)替(ti)根據文檔(dang)數量Flush(4.3版缺省)
當(dang)使用 fuzzy 查詢時設置一個(ge)較小(xiao)的(de)比較長度 (prefixLength)?
考慮使用filters?
等等
?
六、Lucene索引(yin)搜(sou)索及實戰
6.1 理解核心搜索(suo)類?
6.2 IndexSearcher
6.2.1 基(ji)本(ben)Search方法
6.2.2 代碼實(shi)戰
?
6.3 Term?
6.3.1 TermQuery?
6.3.2 Hits 返回的命(ming)中結果
6.3.3 關鍵詞搜索的大致過程
?
6.4 Query?
6.4.1 BooleanQuery布爾搜(sou)索(suo)
使用場景(jing)說明及(ji)代碼(ma)實戰
6.4.2 ? TermRangeQuery范圍搜索
使用場景說明及代碼實戰
6.4.3 ? NumericRangeQuery范圍搜索
?使用場景(jing)說明及(ji)代碼實戰
6.4.4 ? PrefixQuery 前綴搜索
使(shi)用場景(jing)說(shuo)明及(ji)代(dai)碼實戰
6.4.5 ? PhraseQuery短語搜索
使用場景說明及代碼實戰
6.4.6 ? MultiPhraseQuery多(duo)短語搜(sou)索
使(shi)用場景說(shuo)明及代碼實戰
6.4.7 ? FuzzyQuery模糊(hu)搜索
使用場景說明(ming)及代碼實戰
6.4.8 ? WildcardQuery通配符搜索
使用場景(jing)說明(ming)及代碼實戰
6.4.9 ? RegexpQuery正(zheng)則表達(da)式搜(sou)索(suo)
使用場景(jing)說明及代(dai)碼實戰(zhan)
6.4.10 ? 正則表達式語法
深入介紹:正則表達式(shi)是一種文(wen)本(ben)(ben)模(mo)(mo)式(shi),包括普通字(zi)(zi)(zi)(zi)符(例如(ru),a 到(dao) z 之(zhi)間(jian)的(de)字(zi)(zi)(zi)(zi)母(mu))和特殊字(zi)(zi)(zi)(zi)符(稱為(wei)“元字(zi)(zi)(zi)(zi)符”)。模(mo)(mo)式(shi)描述在搜索文(wen)本(ben)(ben)時要匹配的(de)一個(ge)或多個(ge)字(zi)(zi)(zi)(zi)符串。/^\s*$/ 匹配空行。? /\d{2} \d{-5}/ 驗證由兩位數字(zi)(zi)(zi)(zi)、一個(ge)連字(zi)(zi)(zi)(zi)符再加 5 位數字(zi)(zi)(zi)(zi)組成的(de) ID 號(hao)。
/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/ 匹(pi)配 HTML 標記。
等等詳細語法指導
6.4.11 SpanQuery跨度搜索
使用(yong)場(chang)景說明(ming)及代碼(ma)實戰(zhan)
?
十(shi)二、Lucene搜索深入實(shi)戰(zhan)進(jin)階
QueryParser語法
一、Terms,Fields
一般來說,創建(jian)索引的分(fen)析(xi)器和查(cha)(cha)詢(xun)的分(fen)析(xi)器好保持(chi)一致(當(dang)然也(ye)有特殊(shu)情況,比如(ru)單字索引,分(fen)詞(ci)組合查(cha)(cha)詢(xun)),所以選擇一個(ge)不(bu)會(hui)干擾(rao)查(cha)(cha)詢(xun)詞(ci)的分(fen)析(xi)器是很重要的。
代碼實戰
?
二、Term操作(zuo)符 ??
AND,OR,分組,特殊(shu)字符(fu)及: QueryParser.escape(q)? 可去除q中含有查(cha)詢關鍵(jian)字的(de)字符(fu)!如:* ,? 等
代碼實戰
?
三、模糊(hu)查(cha)(cha)詢,范圍查(cha)(cha)詢
Lucene支(zhi)持在Term中使用(yong)通配符來支(zhi)持模糊查詢(xun)。
范圍查詢(xun)(xun)是按字(zi)典查詢(xun)(xun),非“org.apache.lucene.search.NumericRangeQuery”
代碼實戰
?
四、優先級
Lucene支持給(gei)不(bu)(bu)同(tong)(tong)(tong)的查(cha)詢詞設置不(bu)(bu)同(tong)(tong)(tong)的權(quan)重(zhong)。設置權(quan)重(zhong)使用“^”符號,將“^”放于(yu)查(cha)詢詞的尾(wei)部,同(tong)(tong)(tong)時跟上權(quan)重(zhong)值,權(quan)重(zhong)因(yin)子越大,該詞越重(zhong)要。設置權(quan)重(zhong)允許你通(tong)過給(gei)不(bu)(bu)同(tong)(tong)(tong)的查(cha)詢詞設置不(bu)(bu)同(tong)(tong)(tong)的權(quan)重(zhong)來影響文檔的相關性。
代碼實戰
?
十(shi)五、Lucene高級(ji)進(jin)階
在索引中清(qing)除Document
maxDoc()和numDocs()
更新索引中的Document?
分頁搜索的實現
?
十八、 Lucene排序
Lucene默(mo)認按照文檔得分進(jin)行排序
explain方法
加分
sort排序
?
十九、Lucene過(guo)濾
內置的過濾器
org.apache.lucene.search.Filter 提供了幾個內置的過濾器
Direct Known Subclasses:?
CachingWrapperFilter,DocTermOrdsRangeFilter,?FieldCacheRangeFilter,FieldCacheTermsFilter,?FieldValueFilter,?MultiTermQueryWrapperFilter,QueryWrapperFilter
FieldCacheRangeFilter
?
二十(shi)、Lucene分詞器?
20.1 英文(wen)(wen)分(fen)(fen)析器(qi)比較(jiao) ??SimpleAnalyzer; StopAnalyzer; StandardAnalyzer xy&z?mail?is?-?xyz@hello.com ,中(zhong)文(wen)(wen) SimpleAnalyzer 空格及(ji)各種符號分(fen)(fen)割(ge):xy ? , ? ?z ? , ? mail ? , ? is ? , ? xyz ? , ? hello ? , ?com , ? 中(zhong)文(wen)(wen) StopAnalyzer?
空格及各(ge)種符號分割,去掉(diao)停止(zhi)詞,停止(zhi)詞包括?is,are,in,on,the等無實(shi)際(ji)意義的(de)詞 :xy ? ?, ? z ? , ? ?mail ? ?, ? ? xyz ? ?, ? ?hello ? , ? ?com ?, ? 中文 ?StandardAnalyzer
混合分割,包括(kuo)了去掉停止詞(ci),支持漢語 :xy , ?z ?, ?mail ?, ?xyz ? , ?hello.com ? , ? 中 ? , ? 文(wen)
代碼實戰
?
20.2 中文分(fen)詞器IK Analyzer 2012介(jie)紹?
在(zai)2012版本中,IK實現了簡單的分詞(ci)(ci)歧(qi)義(yi)排除(chu)算法,標志著IK分詞(ci)(ci)器從單純的詞(ci)(ci)典分詞(ci)(ci)向模擬(ni)語(yu)義(yi)分詞(ci)(ci)衍(yan)化。?
?
20.3 IK Analyzer 2012特性
采用了特有的“正向迭代細粒度(du)切(qie)分算(suan)法“,支持細粒度(du)和智能分詞兩種切(qie)分模式
2012版本(ben)的(de)智能分詞模式支(zhi)持簡單(dan)的(de)分詞排(pai)歧義(yi)處理和(he)數量(liang)詞合并(bing)輸出(chu)。?
采用(yong)了多(duo)子(zi)處(chu)理(li)器分析模式,支持:英文字母、數字、中(zhong)文詞匯等分詞處(chu)理(li),兼容韓(han)文、日文字符?
優化的詞典(dian)存儲(chu),更小的內存占(zhan)用。支持用戶詞典(dian)擴展(zhan)定義。特別的,在(zai)2012版本(ben),詞典(dian)支持中(zhong)文,英(ying)文,數(shu)字混合(he)詞語(yu)。
?
20.4 IK Analyzer 2012分詞(ci)效果示例
IK Analyzer 2012版(ban)本支(zhi)持 細粒度(du)切(qie)分(fen) 和 智能切(qie)分(fen),以下是兩(liang)種切(qie)分(fen)方式(shi)的演示樣例。?
代碼實戰
?
20.5 IK Analyzer 2012下載包內容
環境搭建,代碼實戰
自定義擴展詞典實戰
IKAnalyzer.cfg.xml(分詞(ci)器擴(kuo)展配置文件)?
stopword.dic(停止(zhi)詞典(dian))?
ext.dic(自(zi)定義(yi)擴展詞典詞典)?
常(chang)見UTF-8問題演示及解(jie)決,代碼實戰
20.6 高亮工具(ju)包
lucene-highlighter-4.3.0.jar
實(shi)現類似baidu搜索高亮顯示(shi)關鍵(jian)詞,及上下文(wen)的功能
代碼實戰
?
二十(shi)三、Lucene項目實戰 ??9課時(shi)
某(mou)大型企(qi)業信(xin)息化系統中 某(mou)某(mou)文檔中心管理系統
23.1 實(shi)現上(shang)傳并解析全文檢(jian)索各種文件類型
23.1.1 上傳并解(jie)析各種格式的內容文(wen)檔:(.txt,.pdf,.doc,.xls,.docx,.xlsx,.htm……)
23.1.2 Apache Tika – 文檔解析(xi)工具包(bao)
org.apache.tika.parser.AutoDetectParser
23.1.3 文件上傳工具包使用(yong)實戰
org.apache.commons.fileupload
23.2 實現代(dai)碼功能:
23.2.1 文件上傳,
org.apache.commons.fileupload.servlet
實現文件上傳并建立索引
23.2.2 文件下(xia)載,
實現文件點擊下載
23.2.3 文(wen)件管理:文(wen)件刪(shan)除(chu),
目錄(lu)管理,目錄(lu)的增(zeng)加、修改、刪除
23.2.4 全文檢索:
實現全文檢索分頁,
類似baidu搜索的分頁實(shi)現
全文檢索上下文實現摘要
org.apache.Lucene4.search.highlight.*
實(shi)現類似baidu搜索高亮顯(xian)示關鍵詞,及上下文的功能