㈠ Lucene實戰的目錄
目錄
第1部分Lucene核心
第1章初識Lucene 3
1.1應對信息爆炸 4
1.2Lucene是什麼 5
1.2.1Lucene能做些什麼 6
1.2.2Lucene的歷史 7
1.3Lucene和搜索程序組件 9
1.3.1索引組件 10
1.3.2搜索組件 13
1.3.3搜索程序的其他模塊 16
1.3.4Lucene與應用程序的整合點 18
1.4Lucene實戰:程序示例 18
1.4.1建立索引 19
1.4.2搜索索引 22
1.5理解索引過程的核心類 25
1.5.1IndexWriter 25
1.5.2Directory 25
1.5.3Analyzer 26
1.5.4Document 26
1.5.5Field 27
1.6理解搜索過程的核心類 27
1.6.1IndexSearcher 27
1.6.2Term 28
1.6.3Query 28
1.6.4TermQuery 28
1.6.5TopDocs 29
1.7小結 29
第2章構建索引30
2.1Lucene如何對搜索內容進行建模 31
2.1.1文檔和域 31
2.1.2靈活的架構 32
2.1.3反向規格化(Denormalization) 32
2.2理解索引過程 33
2.2.1提取文本和創建文檔 33
2.2.2分析文檔 34
2.2.3向索引添加文檔 34
2.3基本索引操作 35
2.3.1向索引添加文檔 35
2.3.2刪除索引中的文檔 38
2.3.3更新索引中的文檔 39
2.4域選項 41
2.4.1域索引選項 41
2.4.2域存儲選項 42
2.4.3域的項向量選項 42
2.4.4Reader、TokenStream和byte[ ]域值 42
2.4.5域選項組合 43
2.4.6域排序選項 44
2.4.7多值域 44
2.5對文檔和域進行加權操作 45
2.5.1文檔加權操作 45
2.5.2域加權操作 46
2.5.3加權基準(Norms) 47
2.6索引數字、日期和時間 48
2.6.1索引數字 48
2.6.2索引日期和時間 49
2.7域截取(Field truncation) 50
2.8近實時搜索(Near-real-time search) 51
2.9優化索引 51
2.10其他Directory子類 52
2.11並發、線程安全及鎖機制 55
2.11.1線程安全和多虛擬機安全 55
2.11.2通過遠程文件系統訪問索引 56
2.11.3索引鎖機制 57
2.12調試索引 59
2.13高級索引概念 60
2.13.1用IndexReader刪除文檔 61
2.13.2回收被刪除文檔所使用過的磁碟空間 62
2.13.3緩沖和刷新 62
2.13.4索引提交 63
2.13.5ACID事務和索引連續性 65
2.13.6合並段 66
2.14小結 68
第3章為應用程序添加搜索功能70
3.1實現簡單的搜索功能 71
3.1.1對特定項的搜索 72
3.1.2解析用戶輸入的查詢表達式:QueryParser 73
3.2使用IndexSearcher類 76
3.2.1創建IndexSearcher類 76
3.2.2實現搜索功能 78
3.2.3使用TopDocs類 78
3.2.4搜索結果分頁 79
3.2.5近實時搜索 79
3.3理解Lucene的評分機制 81
3.3.1Lucene如何評分 81
3.3.2使用explain()理解搜索結果評分 83
3.4Lucene的多樣化查詢 84
3.4.1通過項進行搜索:TermQuery類 85
3.4.2在指定的項范圍內搜索:TermRangeQuery類 86
3.4.3在指定的數字范圍內搜索:NumericRangeQuery類 87
3.4.4通過字元串搜索:PrefixQuery類 88
3.4.5組合查詢:BooleanQuery類 88
3.4.6通過短語搜索:PhraseQuery類 91
3.4.7通配符查詢:WildcardQuery類 93
3.4.8搜索類似項:FuzzyQuery類 94
3.4.9匹配所有文檔:MatchAllDocsQuery類 95
3.5解析查詢表達式:QueryParser 96
3.5.1Query.toString方法 97
3.5.2TermQuery 97
3.5.3項范圍查詢 98
3.5.4數值范圍搜索和日期范圍搜索 99
3.5.5前綴查詢和通配符查詢 99
3.5.6布爾操作符 100
3.5.7短語查詢 100
3.5.8模糊查詢 101
3.5.9MatchAllDocsQuery 102
3.5.10分組查詢 102
3.5.11域選擇 103
3.5.12為子查詢設置加權 103
3.5.13是否一定要使用QueryParse 103
3.6小結 104
第4章Lucene的分析過程 105
4.1使用分析器 106
4.1.1索引過程中的分析 107
4.1.2QueryParser分析 109
4.1.3解析vs分析:分析器何時不再適用 109
4.2剖析分析器 110
4.2.1語匯單元的組成 111
4.2.2語匯單元流揭秘 112
4.2.3觀察分析器 115
4.2.4語匯單元過濾器:過濾順序的重要性 119
4.3使用內置分析器 121
4.3.1StopAnalyzer 122
4.3.2StandardAnalyzer 122
4.3.3應當採用哪種核心分析器 123
4.4近音詞查詢 123
4.5同義詞、別名和其他表示相同意義的詞 126
4.5.1創建SynonymAnalyzer 127
4.5.2顯示語匯單元的位置 131
4.6詞干分析 132
4.6.1StopFilter保留空位 133
4.6.2合並詞干操作和停用詞移除操作 134
4.7域分析 134
4.7.1多值域分析 135
4.7.2特定域分析 135
4.7.3搜索未被分析的域 136
4.8語言分析 139
4.8.1Unicode與字元編碼 139
4.8.2非英語語種分析 140
4.8.3字元規范化處理 140
4.8.4亞洲語種分析 141
4.8.5有關非英語語種分析的其他問題 143
4.9Nutch分析 144
4.10小結 146
第5章高級搜索技術147
5.1Lucene域緩存 148
5.1.1為所有文檔載入域值 149
5.1.2段對應的reader 149
5.2對搜索結果進行排序 150
5.2.1根據域值進行排序 150
5.2.2按照相關性進行排序 153
5.2.3按照索引順序進行排序 154
5.2.4通過域進行排序 154
5.2.5倒排序 155
5.2.6通過多個域進行排序 156
5.2.7為排序域選擇類型 157
5.2.8使用非默認的locale方式進行排序 157
5.3使用MultiPhraseQuery 158
5.4針對多個域的一次性查詢 160
5.5跨度查詢 162
5.5.1跨度查詢的構建模塊:SpanTermQuery 165
5.5.2在域的起點查找跨度 166
5.5.3彼此相鄰的跨度 167
5.5.4在匹配結果中排除重疊的跨度 169
5.5.5SpanOrQuery類 170
5.5.6SpanQuery類和QueryParser類 171
5.6搜索過濾 172
5.6.1TermRangeFilter 173
5.6.2NumericRangeFilter 174
5.6.3FieldCacheRangeFilter 174
5.6.4特定項過濾 174
5.6.5使用QueryWrapperFilter類 175
5.6.6使用SpanQueryFilter類 175
5.6.7安全過濾器 176
5.6.8使用BooleanQuery類進行過濾 177
5.6.9PrefixFilter 178
5.6.10緩存過濾結果 178
5.6.11將filter封裝成query 179
5.6.12對過濾器進行過濾 179
5.6.13非Lucene內置的過濾器 180
5.7使用功能查詢實現自定義評分 180
5.7.1功能查詢的相關類 180
5.7.2使用功能查詢對最近修改過的文檔進行加權 182
5.8針對多索引的搜索 184
5.8.1使用MultiSearch類 184
5.8.2使用ParallelMultiSearcher進行多線程搜索 186
5.9使用項向量 186
5.9.1查找相似書籍 187
5.9.2它屬於哪個類別 190
5.9.3TermVectorMapper類 193
5.10使用FieldSelector載入域 194
5.11停止較慢的搜索 195
5.12小結 196
第6章擴展搜索198
6.1使用自定義排序方法 199
6.1.1針對地理位置排序方式進行文檔索引 199
6.1.2實現自定義的地理位置排序方式 200
6.1.3訪問自定義排序中的值 203
6.2開發自定義的Collector 204
6.2.1Collector基類 205
6.2.2自定義Collector:BookLinkCollector 206
6.2.3AllDocCollector類 207
6.3擴展QueryParser類 208
6.3.1自定義QueryParser的行為 208
6.3.2禁用模糊查詢和通配符查詢 209
6.3.3處理數值域的范圍查詢 210
6.3.4處理日期范圍 211
6.3.5對已排序短語進行查詢 213
6.4自定義過濾器 215
6.4.1實現自定義過濾器 215
6.4.2搜索期間使用自定義過濾器 216
6.4.3另一種選擇:FilterQuery類 217
6.5有效載荷(Payloads) 218
6.5.1分析期間生成有效載荷 219
6.5.2搜索期間使用有效載荷 220
6.5.3有效載荷和跨度查詢 223
6.5.4通過TermPositions來檢索有效載荷 223
6.6小結 223
第2部分Lucene應用
第7章使用Tika提取文本227
7.1Tika是什麼 228
7.2Tika的邏輯設計和API 230
7.3安裝Tika 231
7.4Tika的內置文本提取工具 232
7.5編程實現文本提取 234
7.5.1索引Lucene文檔 234
7.5.2Tika工具類 237
7.5.3選擇自定義分析器 238
7.6Tika的局限 238
7.7索引自定義的XML文件 239
7.7.1使用SAX進行解析 239
7.7.2使用Apache Commons Digester進行解析和索引 242
7.8其他選擇 244
7.9小結 245
第8章Lucene基本擴展246
8.1Luke:Lucene的索引工具箱 247
8.1.1Overview標簽頁:索引的全局視圖 248
8.1.2瀏覽文檔 249
8.1.3使用QueryParser進行搜索 251
8.1.4Files and Plugins標簽頁 252
8.2分析器、語匯單元器和語匯單元過濾器 253
8.2.1SnowballAnalyzer 255
8.2.2Ngram過濾器 256
8.2.3Shingle過濾器 258
8.2.4獲取捐贈分析器 258
8.3高亮顯示查詢項 259
8.3.1高亮顯示模塊 259
8.3.2獨立的高亮顯示示例 262
8.3.3使用CSS進行高亮顯示處理 263
8.3.4高亮顯示搜索結果 264
8.4FastVector Highlighter類 266
8.5拼寫檢查 269
8.5.1生成提示列表 269
8.5.2選擇最佳提示 271
8.5.3向用戶展示搜索結果 272
8.5.4一些加強拼寫檢查的考慮 273
8.6引人注目的查詢擴展功能 274
8.6.1MoreLikeThis 274
8.6.2FuzzyLikeThisQuery 275
8.6.3BoostingQuery 275
8.6.4TermsFilter 276
8.6.5DuplicateFilter 276
8.6.6RegexQuery 276
8.7構建軟體捐贈模塊(contrib mole) 277
8.7.1源代碼獲取方式 277
8.7.2contrib目錄的Ant插件 277
8.8小結 278
第9章Lucene高級擴展279
9.1鏈式過濾器 280
9.2使用Berkeley DB存儲索引 282
9.3WordNet同義詞 284
9.3.1建立同義詞索引 285
9.3.2將WordNet同義詞鏈接到分析器中 287
9.4基於內存的快速索引 289
9.5XML QueryParser:超出「one box」的搜索介面 289
9.5.1使用XmlQueryParser 291
9.5.2擴展XML查詢語法 295
9.6外圍查詢語言 296
9.7Spatial Lucene 298
9.7.1索引空間數據 299
9.7.2搜索空間數據 302
9.7.3Spatial Lucene的性能特點 304
9.8遠程進行多索引搜索 306
9.9靈活的QueryParser 309
9.10其他內容 312
9.11小結 313
第10章其他編程語言使用Lucene314
10.1移植入門 315
10.1.1移植取捨 316
10.1.2選擇合適的移植版本 317
10.2CLucene(C++) 317
10.2.1移植目的 318
10.2.2API和索引兼容 319
10.2.3支持的平台 321
10.2.4當前情況以及未來展望 321
10.3Lucene-Net(C#和其他.NET編程語言) 321
10.3.1API兼容 323
10.3.2索引兼容 324
10.4KinoSearch和Lucy(Perl) 324
10.4.1KinoSearch 325
10.4.2Lucy 327
10.4.3其他Perl選項 327
10.5Ferret(Ruby) 328
10.6PHP 329
10.6.1Zend Framework 329
10.6.2PHP Bridge 330
10.7PyLucene(python) 330
10.7.1API兼容 332
10.7.2其他Python選項 332
10.8Solr(包含多種編程語言) 332
10.9小結 334
第11章Lucene管理和性能調優335
11.1性能調優 336
11.1.1簡單的性能調優步驟 337
11.1.2測試方法 338
11.1.3索引-搜索時延調優 339
11.1.4索引操作吞吐量調優 340
11.1.5搜索時延和搜索吞吐量調優 344
11.2多線程和並行處理 346
11.2.1使用多線程進行索引操作 347
11.2.2使用多線程進行搜索操作 351
11.3資源消耗管理 354
11.3.1磁碟空間管理 354
11.3.2文件描述符管理 357
11.3.3內存管理 361
11.4熱備份索引 364
11.4.1創建索引備份 365
11.4.2恢復索引 366
11.5常見錯誤 367
11.5.1索引損壞 367
11.5.2修復索引 369
11.6小結 369
第3部分案例分析
第12章案例分析1:Krugle373
12.1Krugle介紹 374
12.2應用架構 375
12.3搜索性能 376
12.4源代碼解析 377
12.5子串搜索 378
12.6查詢VS搜索 381
12.7改進空間 382
12.7.1FieldCache內存使用 382
12.7.2合並索引 382
12.8小結 383
第13章案例分析2:SIREn384
13.1SIREn介紹 385
13.2SIREn優勢 385
13.2.1通過所有域進行搜索 387
13.2.2一種高效詞典 388
13.2.3可變域 388
13.2.4對多值域的高效處理 388
13.3使用SIREn索引實體 388
13.3.1數據模型 389
13.3.2實現問題 389
13.3.3索引概要 390
13.3.4索引前的數據准備 390
13.4使用SIREn搜索實體 392
13.4.1搜索內容 392
13.4.2根據單元限制搜索范圍 393
13.4.3將單元合並成元組 393
13.4.4針對實體描述進行查詢 394
13.5在Solr中集成SIREn 394
13.6Benchmark 395
13.7小結 397
第14章案例分析3:LinkedIn398
14.1使用Bobo Browse進行分組搜索 398
14.1.1Bobo Browse的設計 400
14.1.2深層次分組搜索 403
14.2使用Zoie進行實時搜索 405
14.2.1Zoie架構 406
14.2.2實時VS近實時 409
14.2.3文檔與索引請求 411
14.2.4自定義IndexReaders 411
14.2.5與Lucene的近實時搜索進行比較 412
14.2.6分布式搜索 413
14.3小結 415
附錄A安裝Lucene416
A.1二進制文件安裝 416
A.2運行命令行演示程序 417
A.3運行Web應用演示程序 418
A.4編譯源代碼 419
A.5排錯 420
附錄BLucene索引格式421
B.1邏輯索引視圖 421
B.2關於索引結構 422
B.2.1理解多文件索引結構 422
B.2.2理解復合索引結構 425
B.2.3轉換索引結構 426
B.3倒排索引 427
B.4小結 430
附錄CLucene/contrib benchmark431
C.1運行測試腳本 432
C.2測試腳本的組成部分 435
C.2.1內容源和文檔生成器 438
C.2.2查詢生成器 439
C.3控制結構 439
C.4內置任務 441
C.4.1建立和使用行文件 445
C.4.2內置報表任務 446
C.5評估搜索質量 446
C.6出錯處理 449
C.7小結 449
附錄D資源450
D.1Lucene知識庫 450
D.2國際化 450
D.3語言探測 451
D.4項向量 451
D.5Lucene移植版本 451
D.6案例分析 452
D.7其他 452
D.8信息檢索軟體 452
D.9Doug Cutting的著作 453
D.9.1會議論文 453
D.9.2美國專利 454
㈡ 大數據專業成熱門,該如何轉行做大數據分析師
那我就轉載一篇別人轉行做數據分析的經驗貼給題主吧:
親愛的各位加米穀學院的老師和同學們好,首先非常感謝大家在17年9月到18年3月份5個月時間的陪伴,以及張老師和曾老師在我學習期間的耐心輔導。在大數據培訓的道路上,正是因為有你們的辛勤付出與陪伴,才讓我在大數據職業道路上有了今天我很滿意的薪資待遇。再次謝謝你們!
在數據分析挖掘培訓的過程中給我印象最深就是張老師,張老師的課講的很清楚,尤其是PPT圖解理論,讓我這樣的0基礎學員能夠理解到位,不愧是國家大數據標准組的成員。雖然只有短短五個月的學習時間,但是對於我個人來說收獲非常大,不止讓我從一個小白成功入行,並成功面試到張老師推薦的公司,拿到了我非常滿意的薪水。
張老師希望我可以給後面的學弟學妹們分享一點學習經驗,學習這件事大家都不陌生,大家都是經歷過十幾年的學習生涯。尤其是轉行0基礎學習大數據的同學,對大數據行業了解的也一定很清楚了,才會決定來進行大數據培訓。下面我只說5個方面,後面的學弟學妹可以從中作參考,也希望對你們有幫助。
1、興趣是最好的老師,既然決定轉好從0基礎學習大數據,那你一定要從心裡愛上它,只有你真正的上心了,才能有動力去學好它。
2、多看,課前預習是少不了的,課前老師都會把當天講的課件提前發給你,一定要抽出時間先認真看一下,否則,你會發現到時候老師講的內容你接受起來非常吃力。
3、多問,如果你是一個0基礎學習大數據,之前沒有任何編程基礎,遇到問題一定要多問,第一時間問老師,不要礙著面子死撐,一方面可以鍛煉你的溝通能力,是否能用盡量通俗的話語讓老師明白你遇到的問題所在(對你以後面試很有幫助),另一方面現在的學習成果也影響著以後的薪資待遇。
4、多練,加米穀學院每個階段的實訓項目都是很有針對性的,全部是來自真實企業中真實的項目,現在多練習對於以後的面試以及工作經驗都會非常的有幫助。
5、勤奮,這個說起來很簡單,人都是有惰性的,就像我們上學時候一樣,同樣一個班級,老師教的東西也都一樣,為什麼有的學習好,有的學習不好?數據分析培訓也一樣,畢業之後為什麼有的薪資可以拿到18K,有的卻只有幾千?這跟自己的勤奮程度是成正比的,每個人請找到自己的勤奮點,加油!
㈢ [內附完整源碼和文檔] 基於python的新聞檢索系統
1 系統介紹
1.1 系統需求
新聞檢索系統:定向採集不少於 4 個中文社會新聞網站或頻道,實現這些網站新聞信息及評論信息的自動爬取、抽取、索引和檢索。本項目未使用 lucene,Goose 等成熟開源框架。
1.2 系統思路與框架
本系統總體的實現思路如圖 1 所示:
一個完整的搜索系統主要的步驟是:
對新聞網頁進行爬蟲得到語料庫
抽取新聞的主體內容,得到結構化的 xml 數據
內存式單遍掃描索引構建方法構建倒排索引,供檢索模塊使用
用戶輸入查詢,得到相關文檔返回給用戶
2 設計方案
2.1 新聞爬取
2.1.1 演算法簡述
該模塊針對搜狐,網易,騰訊三大主流新聞網站及官方的參考消息網站進行了新聞獲取。並基於其網站結構,設計了不同的爬取模式。由於網站架構兩兩相似,以下選取兩種類型的典型代表進行介紹:
(1)搜狐新聞
搜狐新聞除正常主頁外,存在隱藏的列表式新聞頁 , 如 http://news.sohu.com/1/0903/62/subject212846206.shtml 。
(2)網易新聞
可以將網易新聞及騰訊新聞歸結為一般類型的新聞主頁,我們採用了自新聞主頁開始的廣度優先的遞歸爬取策略。注意到新聞的正文頁往往是靜態網頁.html,因此,我們將網頁中出現的所有以.html 結尾的網頁的 URL 均記錄下來,在爬取到一定量時,進行一次去重。
對於一些不是新聞的錯分網頁,容錯處理即通過檢查新聞正文標簽
時會被剔除。
新聞正文頁中我們重點關注內容,時間,評論獲取。
2.1.2 創新點
實現了對新聞網頁動態載入的評論進行爬取,如搜狐新聞評論爬取
未藉助開源新聞爬取工具,自己實現了對新聞標題,正文,時間,評論內容,評論數目的高效爬取
2.2 索引構建
分詞,我們藉助開源的 jieba 中文分片語件來完成,jieba 分詞能夠將一個中文句子切成一個個詞項,這樣就可以統計 tf, df 了
去停用詞,去停詞的步驟在 jieba 分詞之後完成
倒排記錄表存儲,詞典用 B-樹或 hash 存儲,倒排記錄表用鄰接鏈表存儲方式,這樣能大大減少存儲空間
倒排索引構建演算法使用內存式單遍掃描索引構建方法(SPIMI),就是依次對每篇新聞進行分詞,如果出現新的詞項則插入到詞典中,否則將該文檔的信息追加到詞項對應的倒排記錄表中。
2.3 檢索模塊
2.3.1 檢索模式
(1)關鍵詞檢索
查詢即根據用戶輸入的關鍵字,返回其相應的新聞。首先根據用戶的查詢進行 jieba 分詞,記錄分詞後詞項的數量以字典形式進行存儲。
完整的源碼和詳細的文檔,上傳到了 WRITE-BUG技術共享平台 上,需要的請自取:
https://www.write-bug.com/article/3122.html