一.概述:
1.1 什么是Lucene4
1.2 全文檢索系統(tǒng)的結(jié)構(gòu)
1.3 Lucene4能做什么
1.4 為什么使用Lucene4
1.5 Lucene4只關(guān)注文本的索引和搜索
1.6 索引庫(kù)結(jié)構(gòu)—倒排序索引
1.7 基于Lucene4的搜索程序例子
1.8 Nutch
Nutch是一個(gè)開(kāi)源Java實(shí)現(xiàn)的搜索引擎。它提供了我們運(yùn)行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬蟲。
1.9 開(kāi)源搜索引擎列表
JXTA Search是一個(gè)分布式的搜索系統(tǒng).設(shè)計(jì)用在點(diǎn)對(duì)點(diǎn)的網(wǎng)絡(luò)與網(wǎng)站上.
Carrot2是一個(gè)開(kāi)源搜索結(jié)果分類引擎。它能夠自動(dòng)把搜索結(jié)果組織成一些專題分類。
?MG4J可以讓你為大量的文檔集合構(gòu)建一個(gè)被壓縮的全文本索引,通過(guò)使內(nèi)插編碼(interpolative coding)技術(shù).
1.10 全球商用搜索市場(chǎng)
在全球商用搜索市場(chǎng)上,Autonomy是老大!Autonomy的市值不足Google的零頭,而Google在這一市場(chǎng)的份額也不足Autonomy份額的零頭.
1.11 幾種常見(jiàn)的基于Lucene4的開(kāi)源搜索解決方案對(duì)比
Solr Cloud;Solandra = Solr + Cassandra ;HBasene(Lucene+HBase)
1.12 Lucene4倒排索引原理
1.13 Lucene4基本開(kāi)發(fā)環(huán)境配置-樣例項(xiàng)目概覽
1.14 快速瀏覽demo
?
二、Lucene系統(tǒng)架構(gòu)?
2.1 Lucene4系統(tǒng)結(jié)構(gòu)
2.2 Lucene4包結(jié)構(gòu)功能表?
2.3 Lucene4的主要邏輯圖?
2.3.1 查詢邏輯
2.3.2 入庫(kù)邏輯
2.4 理解核心索引類?
2.4.1 IndexWriter
2.4.2 Directory
2.4.3 Analyzer
?2.4.4 Document
2.4.5 Field
2.5 靜態(tài)內(nèi)部類
Field.Store ?表示Field的存儲(chǔ)方式
2.6 關(guān)于Field的重要說(shuō)明
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 項(xiàng)目實(shí)戰(zhàn)動(dòng)手演練
?
三、 Lucene索引里有什么
什么是索引 index
Lucene索引的術(shù)語(yǔ)定義
倒排索引(inverted indexing)
Fields的種類
片斷(segments)
文檔編號(hào)(document numbers)
索引結(jié)構(gòu)概述
Lucene src自帶樣例代碼
Lucene索引的目錄結(jié)構(gòu)
?
四、Lucene索引深入
4.1 Lucene4索引的目錄結(jié)構(gòu)
4.2 索引文件后綴名說(shuō)明: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 當(dāng)前版本索引的限制:Lucene的當(dāng)前實(shí)現(xiàn)索引中使用Java語(yǔ)言中的 int 對(duì)term詞典計(jì)數(shù)。所以單個(gè)索引片段文件中詞典最大的數(shù)目為: ~2.1 billion ?(約21億) ?X ?索引片段文件最大個(gè)數(shù)(128)
故 能索引的詞典最大數(shù)目為: ~274 billion (約2740億)
這個(gè)限制不是索引文件格式造成的,是采用當(dāng)前java實(shí)現(xiàn)版本造成的。(This is technically not a limitation of the index file format, just of Lucene's current implementation.)
同理:也是使用int 對(duì)document文檔源計(jì)數(shù)的。并且索引文件格式也是采用的?Int32?在硬盤上存儲(chǔ)document文檔號(hào)的。這個(gè)限制即是實(shí)現(xiàn)版本也是索引文件格式的限制,后續(xù)可能會(huì)改為?UInt64?或?Vint 更好就沒(méi)限制了。
4.4 索引文件可放的位置
內(nèi)存,硬盤
?
五、 Lucene索引深入優(yōu)化
5.1 索引的合并
實(shí)際代碼實(shí)戰(zhàn)
5.2 索引優(yōu)化的部分技巧
重用Document和Field實(shí)例
使用按照內(nèi)存消耗Flush代替根據(jù)文檔數(shù)量Flush(4.3版缺?。?/p>
當(dāng)使用 fuzzy 查詢時(shí)設(shè)置一個(gè)較小的比較長(zhǎng)度 (prefixLength)?
考慮使用filters?
等等
?
六、Lucene索引搜索及實(shí)戰(zhàn)
6.1 理解核心搜索類?
6.2 IndexSearcher
6.2.1 基本Search方法
6.2.2 代碼實(shí)戰(zhàn)
?
6.3 Term?
6.3.1 TermQuery?
6.3.2 Hits 返回的命中結(jié)果
6.3.3 關(guān)鍵詞搜索的大致過(guò)程
?
6.4 Query?
6.4.1 BooleanQuery布爾搜索
使用場(chǎng)景說(shuō)明及代碼實(shí)戰(zhàn)
6.4.2 ? TermRangeQuery范圍搜索
使用場(chǎng)景說(shuō)明及代碼實(shí)戰(zhàn)
6.4.3 ? NumericRangeQuery范圍搜索
?使用場(chǎng)景說(shuō)明及代碼實(shí)戰(zhàn)
6.4.4 ? PrefixQuery 前綴搜索
使用場(chǎng)景說(shuō)明及代碼實(shí)戰(zhàn)
6.4.5 ? PhraseQuery短語(yǔ)搜索
使用場(chǎng)景說(shuō)明及代碼實(shí)戰(zhàn)
6.4.6 ? MultiPhraseQuery多短語(yǔ)搜索
使用場(chǎng)景說(shuō)明及代碼實(shí)戰(zhàn)
6.4.7 ? FuzzyQuery模糊搜索
使用場(chǎng)景說(shuō)明及代碼實(shí)戰(zhàn)
6.4.8 ? WildcardQuery通配符搜索
使用場(chǎng)景說(shuō)明及代碼實(shí)戰(zhàn)
6.4.9 ? RegexpQuery正則表達(dá)式搜索
使用場(chǎng)景說(shuō)明及代碼實(shí)戰(zhàn)
6.4.10 ? 正則表達(dá)式語(yǔ)法
深入介紹:正則表達(dá)式是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為“元字符”)。模式描述在搜索文本時(shí)要匹配的一個(gè)或多個(gè)字符串。/^\s*$/ 匹配空行。? /\d{2} \d{-5}/ 驗(yàn)證由兩位數(shù)字、一個(gè)連字符再加 5 位數(shù)字組成的 ID 號(hào)。
/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/ 匹配 HTML 標(biāo)記。
等等詳細(xì)語(yǔ)法指導(dǎo)
6.4.11 SpanQuery跨度搜索
使用場(chǎng)景說(shuō)明及代碼實(shí)戰(zhàn)
?
十二、Lucene搜索深入實(shí)戰(zhàn)進(jìn)階
QueryParser語(yǔ)法
一、Terms,F(xiàn)ields
一般來(lái)說(shuō),創(chuàng)建索引的分析器和查詢的分析器最好保持一致(當(dāng)然也有特殊情況,比如單字索引,分詞組合查詢),所以選擇一個(gè)不會(huì)干擾查詢?cè)~的分析器是很重要的。
代碼實(shí)戰(zhàn)
?
二、Term操作符 ??
AND,OR,分組,特殊字符及: QueryParser.escape(q)? 可去除q中含有查詢關(guān)鍵字的字符!如:* ,? 等
代碼實(shí)戰(zhàn)
?
三、模糊查詢,范圍查詢
Lucene支持在Term中使用通配符來(lái)支持模糊查詢。
范圍查詢是按字典查詢,非“org.apache.lucene.search.NumericRangeQuery”
代碼實(shí)戰(zhàn)
?
四、優(yōu)先級(jí)
Lucene支持給不同的查詢?cè)~設(shè)置不同的權(quán)重。設(shè)置權(quán)重使用“^”符號(hào),將“^”放于查詢?cè)~的尾部,同時(shí)跟上權(quán)重值,權(quán)重因子越大,該詞越重要。設(shè)置權(quán)重允許你通過(guò)給不同的查詢?cè)~設(shè)置不同的權(quán)重來(lái)影響文檔的相關(guān)性。
代碼實(shí)戰(zhàn)
?
十五、Lucene高級(jí)進(jìn)階
在索引中清除Document
maxDoc()和numDocs()
更新索引中的Document?
分頁(yè)搜索的實(shí)現(xiàn)
?
十八、 Lucene排序
Lucene默認(rèn)按照文檔得分進(jìn)行排序
explain方法
加分
sort排序
?
十九、Lucene過(guò)濾
內(nèi)置的過(guò)濾器
org.apache.lucene.search.Filter 提供了幾個(gè)內(nèi)置的過(guò)濾器
Direct Known Subclasses:?
CachingWrapperFilter,DocTermOrdsRangeFilter,?FieldCacheRangeFilter,FieldCacheTermsFilter,?FieldValueFilter,?MultiTermQueryWrapperFilter,QueryWrapperFilter
FieldCacheRangeFilter
?
二十、Lucene分詞器?
20.1 英文分析器比較 ??SimpleAnalyzer; StopAnalyzer; StandardAnalyzer xy&z?mail?is?-?xyz@hello.com ,中文 SimpleAnalyzer 空格及各種符號(hào)分割:xy ? , ? ?z ? , ? mail ? , ? is ? , ? xyz ? , ? hello ? , ?com , ? 中文 StopAnalyzer?
空格及各種符號(hào)分割,去掉停止詞,停止詞包括?is,are,in,on,the等無(wú)實(shí)際意義的詞 :xy ? ?, ? z ? , ? ?mail ? ?, ? ? xyz ? ?, ? ?hello ? , ? ?com ?, ? 中文 ?StandardAnalyzer
混合分割,包括了去掉停止詞,支持漢語(yǔ) :xy , ?z ?, ?mail ?, ?xyz ? , ?hello.com ? , ? 中 ? , ? 文
代碼實(shí)戰(zhàn)
?
20.2 中文分詞器IK Analyzer 2012介紹?
在2012版本中,IK實(shí)現(xiàn)了簡(jiǎn)單的分詞歧義排除算法,標(biāo)志著IK分詞器從單純的詞典分詞向模擬語(yǔ)義分詞衍化。?
?
20.3 IK Analyzer 2012特性
采用了特有的“正向迭代最細(xì)粒度切分算法“,支持細(xì)粒度和智能分詞兩種切分模式
2012版本的智能分詞模式支持簡(jiǎn)單的分詞排歧義處理和數(shù)量詞合并輸出。?
采用了多子處理器分析模式,支持:英文字母、數(shù)字、中文詞匯等分詞處理,兼容韓文、日文字符?
優(yōu)化的詞典存儲(chǔ),更小的內(nèi)存占用。支持用戶詞典擴(kuò)展定義。特別的,在2012版本,詞典支持中文,英文,數(shù)字混合詞語(yǔ)。
?
20.4 IK Analyzer 2012分詞效果示例
IK Analyzer 2012版本支持 細(xì)粒度切分 和 智能切分,以下是兩種切分方式的演示樣例。?
代碼實(shí)戰(zhàn)
?
20.5 IK Analyzer 2012下載包內(nèi)容
環(huán)境搭建,代碼實(shí)戰(zhàn)
自定義擴(kuò)展詞典實(shí)戰(zhàn)
IKAnalyzer.cfg.xml(分詞器擴(kuò)展配置文件)?
stopword.dic(停止詞典)?
ext.dic(自定義擴(kuò)展詞典詞典)?
常見(jiàn)UTF-8問(wèn)題演示及解決,代碼實(shí)戰(zhàn)
20.6 高亮工具包
lucene-highlighter-4.3.0.jar
實(shí)現(xiàn)類似baidu搜索高亮顯示關(guān)鍵詞,及上下文的功能
代碼實(shí)戰(zhàn)
?
二十三、Lucene項(xiàng)目實(shí)戰(zhàn) ??9課時(shí)
某大型企業(yè)信息化系統(tǒng)中 某某文檔中心管理系統(tǒng)
23.1 實(shí)現(xiàn)上傳并解析全文檢索各種文件類型
23.1.1 上傳并解析各種格式的內(nèi)容文檔:(.txt,.pdf,.doc,.xls,.docx,.xlsx,.htm……)
23.1.2 Apache Tika – 文檔解析工具包
org.apache.tika.parser.AutoDetectParser
23.1.3 文件上傳工具包使用實(shí)戰(zhàn)
org.apache.commons.fileupload
23.2 實(shí)現(xiàn)代碼功能:
23.2.1 文件上傳,
org.apache.commons.fileupload.servlet
實(shí)現(xiàn)文件上傳并建立索引
23.2.2 文件下載,
實(shí)現(xiàn)文件點(diǎn)擊下載
23.2.3 文件管理:文件刪除,
目錄管理,目錄的增加、修改、刪除
23.2.4 全文檢索:
實(shí)現(xiàn)全文檢索分頁(yè),
類似baidu搜索的分頁(yè)實(shí)現(xiàn)
全文檢索上下文實(shí)現(xiàn)摘要
org.apache.Lucene4.search.highlight.*
實(shí)現(xiàn)類似baidu搜索高亮顯示關(guān)鍵詞,及上下文的功能