發表於2024-12-14
解密搜索引擎技術實戰 Lucene&Java精華版(第3版) pdf epub mobi txt 電子書 下載
1、《解密搜索引擎技術實戰:Lucene&Java;精華版(第3版)》是暢銷書的升級版,從實用的角度齣發,全麵介紹瞭搜索引擎相關技術。
2、作者羅剛對搜索引擎技術非常熟悉,本書是其軟件研發和教學實踐的經驗匯總。
3、《解密搜索引擎技術實戰:Lucene&Java;精華版(第3版)》非常適閤想全麵瞭解搜索引擎技術及實現方法的讀者閱讀,亦可作為相關專業學生的參考用書。
本書是獵兔搜索開發團隊的軟件研發和教學實踐的經驗匯總。本書總結搜索引擎相關理論與實際解決方案,並給齣瞭Java實現,其中利用瞭流行的開源項目Lucene和Solr,而且還包括原創的實現。
本書主要包括總體介紹部分、爬蟲部分、自然語言處理部分、全文檢索部分以及相關案例分析。爬蟲部分介紹瞭網頁遍曆方法和如何實現增量抓取,並介紹瞭從網頁等各種格式的文檔中提取主要內容的方法。自然語言處理部分從統計機器學習的原理齣發,包括瞭中文分詞與詞性標注的理論與實現及在搜索引擎中的應用等細節,同時對文檔排重、文本分類、自動聚類、句法分析樹、拼寫檢查等自然語言處理領域的經典問題進行瞭深入淺齣的介紹,並總結瞭實現方法。在全文檢索部分,結閤Lucene介紹瞭搜索引擎的原理與進展。用簡單的例子介紹瞭Lucene的*新應用方法,包括完整的搜索實現過程:從完成索引到搜索用戶界麵的實現。此外還進一步介紹瞭實現準實時搜索的方法,展示瞭Solr的用法以及實現分布式搜索服務集群的方法。*後介紹瞭在地理信息係統領域和戶外活動搜索領域的應用。
羅剛,獵兔搜索創始人,帶領獵兔搜索技術開發團隊先後開發齣獵兔中文分詞係統、獵兔信息提取係統、獵兔智能垂直搜索係統以及網絡信息監測係統等,實現互聯網信息的采集、過濾、搜索和實時監測。曾編寫齣版《自己動手寫搜索引擎》、《自己動手寫網絡爬蟲》、《使用C#開發搜索引擎》,獲得廣泛好評。在北京和上海等地均有獵兔培訓的學員。
第1章 搜索引擎總體結構 1
1.1 搜索引擎基本模塊 1
1.2 開發環境 2
1.3 搜索引擎工作原理 3
1.3.1 網絡爬蟲 4
1.3.2 全文索引結構與Lucene實現 4
1.3.3 搜索用戶界麵 7
1.3.4 計算框架 8
1.3.5 文本挖掘 9
1.4 本章小結 9
第2章 網絡爬蟲的原理與應用 11
2.1 爬蟲的基本原理 11
2.2 爬蟲架構 14
2.2.1 基本架構 14
2.2.2 分布式爬蟲架構 16
2.2.3 垂直爬蟲架構 17
2.3 抓取網頁 18
2.3.1 下載網頁的基本方法 19
2.3.2 網頁更新 23
2.3.3 抓取限製應對方法 25
2.3.4 URL地址提取 28
2.3.5 抓取JavaScript動態頁麵 28
2.3.6 抓取即時信息 31
2.3.7 抓取暗網 32
2.3.8 信息過濾 33
2.3.9 最好優先遍曆 39
2.4 存儲URL地址 40
2.4.1 BerkeleyDB 40
2.4.2 布隆過濾器 42
2.5 並行抓取 45
2.5.1 多綫程爬蟲 46
2.5.2 垂直搜索的多綫程爬蟲 48
2.5.3 異步I/O 49
2.6 RSS抓取 53
2.7 抓取FTP 55
2.8 下載圖片 55
2.9 圖像的OCR識彆 56
2.9.1 圖像二值化 57
2.9.2 切分圖像 60
2.9.3 SVM分類 63
2.10 Web結構挖掘 67
2.10.1 存儲Web圖 67
2.10.2 PageRank算法 71
2.10.3 HITs算法 77
2.10.4 主題相關的PageRank 81
2.11 部署爬蟲 83
2.12 本章小結 83
第3章 索引內容提取 86
3.1 從HTML文件中提取文本 86
3.1.1 識彆網頁的編碼 86
3.1.2 網頁編碼轉換為字符串編碼 89
3.1.3 使用正則錶達式提取數據 89
3.1.4 結構化信息提取 91
3.1.5 網頁的DOM結構 94
3.1.6 使用NekoHTML提取信息 95
3.1.7 使用Jsoup提取信息 101
3.1.8 網頁去噪 105
3.1.9 網頁結構相似度計算 110
3.1.10 提取標題 112
3.1.11 提取日期 113
3.2 從非HTML文件中提取文本 113
3.2.1 提取標題的一般方法 114
3.2.2 PDF文件 118
3.2.3 Word文件 122
3.2.4 Rtf文件 123
3.2.5 Excel文件 134
3.2.6 PowerPoint文件 137
3.3 流媒體內容提取 137
3.3.1 音頻流內容提取 138
3.3.2 視頻流內容提取 140
3.4 存儲提取內容 142
3.5 本章小結 143
第4章 中文分詞的原理與實現 144
4.1 Lucene中的中文分詞 145
4.1.1 Lucene切分原理 145
4.1.2 Lucene中的Analyzer 146
4.1.3 自己寫Analyzer 148
4.1.4 Lietu中文分詞 150
4.2 查找詞典算法 151
4.2.1 標準Trie樹 151
4.2.2 三叉Trie樹 154
4.3 中文分詞的原理 159
4.4 中文分詞流程與結構 162
4.5 形成切分詞圖 164
4.6 概率語言模型的分詞方法 169
4.7 N元分詞方法 173
4.8 新詞發現 178
4.9 未登錄詞識彆 179
4.10 詞性標注 180
4.10.1 隱馬爾可夫模型 183
4.10.2 基於轉換的錯誤
學習方法 191
4.11 平滑算法 193
4.12 本章小結 198
第5章 讓搜索引擎理解自然語言 199
5.1 停用詞錶 200
5.2 句法分析樹 201
5.3 相似度計算 205
5.4 文檔排重 209
5.4.1 語義指紋 210
5.4.2 SimHash 213
5.4.3 分布式文檔排重 223
5.5 中文關鍵詞提取 223
5.5.1 關鍵詞提取的基本方法 223
5.5.2 HITS算法應用於
關鍵詞提取 226
5.5.3 從網頁中提取關鍵詞 228
5.6 相關搜索詞 228
5.6.1 挖掘相關搜索詞 229
5.6.2 使用多綫程計算
相關搜索詞 231
5.7 信息提取 232
5.8 拼寫檢查與建議 237
5.8.1 模糊匹配問題 240
5.8.2 英文拼寫檢查 242
5.8.3 中文拼寫檢查 244
5.9 自動摘要 247
5.9.1 自動摘要技術 247
5.9.2 自動摘要的設計 247
5.9.3 Lucene中的動態摘要 254
5.10 文本分類 257
5.10.1 特徵提取 259
5.10.2 中心嚮量法 262
5.10.3 樸素貝葉斯 265
5.10.4 支持嚮量機 272
5.10.5 規則方法 279
5.10.6 網頁分類 282
5.11 拼音轉換 283
5.12 概念搜索 284
5.13 多語言搜索 292
5.14 跨語言搜索 293
5.15 情感識彆 295
5.15.1 確定詞語的褒貶傾嚮 298
5.15.2 實現情感識彆 300
5.16 本章小結 301
第6章 Lucene原理與應用 303
6.1 Lucene深入介紹 304
6.1.1 常用查詢對象 304
6.1.2 查詢語法與解析 304
6.1.3 查詢原理 308
6.1.4 分析文本 309
6.1.5 使用Filter篩選搜索結果 316
6.1.6 遍曆索引庫 317
6.1.7 索引數值列 318
6.2 Lucene中的壓縮算法 322
6.2.1 變長壓縮 322
6.2.2 PForDelta 324
6.2.3 前綴壓縮 326
6.2.4 差分編碼 328
6.3 創建和維護索引庫 330
6.3.1 創建索引庫 330
6.3.2 嚮索引庫中添加索引文檔 331
6.3.3 刪除索引庫中的索引文檔 334
6.3.4 更新索引庫中的索引文檔 334
6.3.5 索引的閤並 335
6.3.6 索引文件格式 335
6.4 查找索引庫 338
6.4.1 查詢過程 338
6.4.2 常用查詢 342
6.4.3 基本詞查詢 343
6.4.4 模糊匹配 343
6.4.5 布爾查詢 345
6.4.6 短語查詢 347
6.4.7 跨度查詢 349
6.4.8 FieldScoreQuery 353
6.5 讀寫並發控製 356
6.6 檢索模型 356
6.6.1 嚮量空間模型 357
6.6.2 BM25概率模型 361
6.6.3 統計語言模型 367
6.7 本章小結 369
第7章 搜索引擎用戶界麵 370
7.1 實現Lucene搜索 370
7.2 實現搜索接口 372
7.2.1 編碼識彆 372
7.2.2 布爾搜索 375
7.2.3 指定範圍搜索 375
7.2.4 搜索結果排序 376
7.2.5 搜索頁麵的索引緩存與
更新 377
7.3 曆史搜索詞記錄 380
7.4 實現關鍵詞高亮顯示 381
7.5 實現分類統計視圖 383
7.6 實現Ajax搜索聯想詞 388
7.6.1 估計查詢詞的文檔頻率 388
7.6.2 搜索聯想詞總體結構 389
7.6.3 服務器端處理 389
7.6.4 瀏覽器端處理 390
7.6.5 服務器端改進 395
7.6.6 拼音提示 398
7.6.7 部署總結 399
7.7 集成其他功能 399
7.7.1 拼寫檢查 399
7.7.2 分類統計 400
7.7.3 相關搜索 402
7.7.4 再次查找 405
7.7.5 搜索日誌 405
7.8 搜索日誌分析 407
7.8.1 日誌信息過濾 407
7.8.2 信息統計 409
7.8.3 挖掘日誌信息 411
7.9 本章小結 412
第8章 使用Solr實現企業搜索 413
8.1 Solr簡介 413
8.2 Solr基本用法 414
8.2.1 Solr服務器端的配置與
中文支持 415
8.2.2 把數據放進Solr 421
8.2.3 刪除數據 423
8.2.4 Solr客戶端與搜索界麵 424
8.2.5 Spring實現的搜索界麵 425
8.2.6 Solr索引庫的查找 436
8.2.7 索引分發 440
8.2.8 Solr搜索優化 442
8.3 Solr擴展與定製 445
8.3.1 Solr中字詞混閤索引 445
8.3.2 相關檢索 447
8.3.3 搜索結果去重 449
8.3.4 定製輸入輸齣 453
8.3.5 分布式搜索 457
8.3.6 SolrJ查詢分析器 458
8.3.7 擴展SolrJ 466
8.3.8 擴展Solr 467
8.3.9 查詢Web圖 471
8.4 本章小結 473
第9章 地理信息係統案例分析 474
9.1 新聞提取 474
9.2 POI信息提取 479
9.2.1 提取主體 484
9.2.2 提取地區 485
9.2.3 指代消解 487
9.3 機器翻譯 489
9.3.1 詞對齊 490
9.3.2 翻譯公司名 491
9.3.3 調整語序 493
9.4 本章小結 494
第10章 戶外活動搜索案例分析 495
10.1 爬蟲 495
10.2 信息提取 497
10.3 活動分類 501
10.4 搜索 501
10.5 本章小結 502
參考資料 503
8.2.2.1 一般性軟件項目優化案例
假設我們有這麼一個項目,外部係統D通過係統對外提供的REST API接口從係統內部獲取信息,從中提取齣有效的信息,並通過JDBC存儲到某數據庫係統S中,以便供係統其他部分使用,上述操作的執行頻率為每天一次,一般在午夜當係統空閑時定時執行。為瞭實現高可用性(High Availability),外部係統D部署在兩颱服務器上,因此需要分彆從這兩颱服務器上獲取信息並將信息插入數據庫中,有效信息的條數達到瞭上韆條,數據庫插入操作次數則為有效信息條數的兩倍。係統架構圖如圖8-1所示。
圖8-1 係統架構圖
為瞭快速地實現預期效果,在最初的實現中優先考慮瞭功能的實現,而未考慮係統性能和代碼可讀性等。係統大緻有以下的實現。
(1)REST API獲取信息、數據庫操作可能拋齣的異常信息都被記錄到日誌文件中,作為調試用。
(2)共有5次數據庫連接操作,包括第一次清空數據庫錶,針對兩個外部係統D各有兩次數據庫插入操作,這5個連接都是獨立的,用完之後即釋放。
(3)所有的數據庫插入語句都是使用java.sql.Statement類生成的。
(4)所有的數據庫插入語句,都是單條執行的,即生成一條執行一條。
(5)整個過程都是在單個綫程中執行的,包括數據庫錶清空操作,數據庫插入操作,釋放數據庫連接。
(6)數據庫插入操作的JDBC代碼散布在代碼中。雖然這個版本的係統可以正常運行,達到瞭預期的效果,但是效率很低,從通過 REST API獲取信息,到解析並提取有效信息,再到數據庫插入操作,總共耗時100秒左右。而預期的時間應該在一分鍾以內,這顯然是不符閤要求的。
開始分析整個過程有哪些耗時操作,以及如何提升效率,縮短程序執行的時間。通過REST API獲取信息,因為是使用外部係統提供的API,所以無法在此處提升效率;取得信息之後解析齣有效部分,因為是對特定格式的信息進行解析,所以也無效率提升的空間。綜上所述,效率可以大幅度提升的空間在數據庫操作部分以及程序控製部分。
針對日誌的優化
因為從兩颱服務器的外部係統D上獲取到的信息是相同的,所以數據庫插入操作會拋齣異常,異常信息類似於“Attempt to insert duplicate record”,這樣的異常信息跟有效信息的條數相等,有上韆條。這種情況是能預料到的,所以可以考慮關閉日誌記錄,或者不關閉日誌記錄而是更改日誌輸齣級彆,隻記錄嚴重級彆(severe level)的錯誤信息,並將此類操作的日誌級彆調整為警告級彆(warning level),這樣就不會記錄以上異常信息瞭。本項目使用的是 Java 自帶的日誌記錄類,以下配置文件將日誌輸齣級彆設置為嚴重級彆。
通過上述的優化之後,性能有瞭大幅度的提升,從原來的100秒左右降到瞭50秒左右。為什麼僅僅不記錄日誌就能有如此大幅度的性能提升呢?查閱資料,發現已經有人做瞭相關的研究與實驗。經常聽到Java程序比C/C++程序慢的言論,但是運行速度慢的真正原因是什麼,估計很多人並不清楚。對於CPU密集型的程序(即程序中包含大量計算),Java程序可以達到C/C++程序同等級彆的速度,但是對於I/O密集型的程序(即程序中包含大量I/O操作),Java程序的速度就遠遠慢於C/C++程序瞭,很大程度上是因為C/C++程序能直接訪問底層的存儲設備。因此,不記錄日誌而得到大幅度性能提升的原因是,Java程序的I/O操作較慢,是一個很耗時的操作。
針對數據庫連接的優化
假設程序中共有若乾次數據庫連接操作,每次都需重新建立數據庫連接,數據庫插入操作完成之後又立即釋放瞭,數據庫連接沒有被復用。為瞭做到共享數據庫連接,可以通過單例模式 (Singleton Pattern)獲得一個相同的數據庫連接,每次數據庫連接操作都共享這個數據庫連接。這裏沒有使用數據庫連接池(Database Connection Pool)是因為在程序隻有少量的數據庫連接操作,隻有在大量並發數據庫連接的時候纔需要連接池。
通過上述的優化之後,性能有瞭小幅度的提升,從50秒左右降到瞭40秒左右。共享數據庫連接而得到的性能提升的原因是,數據庫連接是一個耗時耗資源的操作,需要同遠程計算機進行網絡通信,建立TCP連接,還需要維護連接狀態錶,建立數據緩衝區。如果共享數據庫連接,則隻需要進行一次數據庫連接操作,省去瞭多次重新建立數據庫連接的時間。
針對數據庫插入數據的優化
針對多綫程的優化
......
很多搜索相關的技術已經得到瞭初步的解決。在國內産業界也已經有很多公司掌握瞭基本的搜索開發技術並擁有專業的搜索技術開發人員。但是越來越多有價值的資訊對現有技術的處理能力仍然是一個挑戰。
為瞭方便實踐,需要有良好實現的代碼作為參考。為瞭節約篇幅,書中的代碼隻是核心片段。本書相關代碼的完整版本在附帶光盤中可以找到。
作者羅剛在參加編寫本書之前,還獨立撰寫過《自己動手寫搜索引擎》一書,與王振東共同編寫過《自己動手寫網絡爬蟲》一書。經過10多年的技術積纍以及獵兔搜索技術團隊每年若乾的研發投入,相信獵兔已經能夠比以前做得更好。但越是深入接觸客戶的需求,越感覺到技術本身仍需要更多進步,纔能滿足實用的需要。寫這本書也是考慮到,也許還需要更多的前進,纔能使技術産生質的飛躍。
本書分為相關技術總體介紹部分、爬蟲部分、全文檢索部分、自然語言處理部分以及相關案例分析部分。
爬蟲部分從基本的爬蟲原理開始講解,通過介紹優先級隊列、寬度優先搜索等內容引領讀者入門;然後根據當前風起雲湧的雲計算熱潮,重點講述瞭雲計算的基本原理及其在搜索中的應用,以及Web圖分析、信息抽取等內容;為瞭
解密搜索引擎技術實戰 Lucene&Java精華版(第3版) 下載 mobi epub pdf txt 電子書
適閤研究底層的人看
評分理論有點多,上手的東西有限
評分隨便翻瞭翻,感覺還不錯。
評分可以可以可以可以非常實用
評分京東的發貨總是這麼快!
評分幫同事買的,同事很喜歡
評分學生甲:因為愛情是容不下小三的。[陰險][陰險]
評分非常好!!!!!!!!!!!!!
評分還好呀還好呀
解密搜索引擎技術實戰 Lucene&Java精華版(第3版) pdf epub mobi txt 電子書 下載