産品特色
編輯推薦
獵兔搜索工程師數十年技術積澱與升華,講解分布式搜索引擎的基本算法與原理。ElasticSearch分布式集群實踐經驗的總結,帶領讀者快速入門分布式搜索引擎開發。
內容簡介
本書介紹瞭分布式搜索引擎開發的原理與Java實現,主要包括全文檢索的原理與實現、分布式算法與代碼實現、SolrCloud和ElasticSearch的使用與原理等內容,並著重介紹瞭一種實現分布式中文搜索引擎的方法。
本書適閤有Java程序設計基礎的開發人員或者對分布式搜索引擎技術感興趣的從業人員使用
作者簡介
羅剛,計算機軟件碩士,畢業於吉林工業大學。2005年創立北京盈智星科技發展有限公司,2008年聯閤創立上海數聚軟件公司。獵兔搜索創始人,當前獵兔搜索在北京、上海以及石傢莊均設有研發部。他帶領獵兔搜索技術開發團隊先後開發齣獵兔中文分詞係統、獵兔文本挖掘係統,智能垂直搜索係統以及網絡信息監測係統等,實現互聯網信息的采集、過濾、搜索和實時監測,其開發的搜索軟件日用戶訪問量萬次以上。
目錄
第1章 搜索引擎 1
1.1 搜索引擎基本模塊 2
1.2 開發環境 3
1.3 搜索引擎工作原理 4
1.3.1 網絡爬蟲 5
1.3.2 全文索引 5
1.3.3 搜索用戶界麵 8
1.3.4 分布式計算 9
1.3.5 文本挖掘 9
1.4 算法基礎 9
1.4.1 摺半查找 10
1.4.2 排序 10
1.4.3 最小生成樹 12
1.5 軟件工具 15
1.6 單元測試 15
1.7 本章小結 17
1.8 術語錶 18
第2章 自己動手寫全文檢索 19
2.1 構建索引 22
2.2 生成索引文件 23
2.3 讀入索引文件 25
2.4 查詢 26
2.5 有限狀態機 29
2.5.1 運算 29
2.5.2 編輯距離有限狀態機 30
2.6 本章小結 32
第3章 Lucene的原理與應用 33
3.1 Lucene快速入門 34
3.1.1 創建索引 34
3.1.2 查詢索引庫 35
3.1.3 創建文檔索引 36
3.1.4 查詢文檔索引 36
3.2 創建和維護索引庫 37
3.2.1 設計索引庫結構 37
3.2.2 創建索引庫 38
3.2.3 嚮索引庫中添加索引文檔 40
3.2.4 刪除索引庫中的索引文檔 43
3.2.5 更新索引庫中的索引文檔 44
3.2.6 關閉索引庫 45
3.2.7 索引的優化與閤並 45
3.2.8 靈活索引 46
3.2.9 索引文件格式 47
3.2.10 定製索引存儲結構 49
3.2.11 寫索引集成到爬蟲 54
3.2.12 多綫程寫索引 56
3.2.13 分發索引 58
3.2.14 修復索引 61
3.3 查找索引庫 61
3.3.1 查詢過程 61
3.3.2 常用查詢 64
3.3.3 基本詞查詢 65
3.3.4 模糊匹配 65
3.3.5 布爾查詢 67
3.3.6 短語查詢 69
3.3.7 跨度查詢 71
3.3.8 FieldScoreQuery 74
3.3.9 排序 77
3.3.10 使用Filter篩選搜索結果 81
3.3.11 使用Collector篩選搜索
結果 82
3.3.12 遍曆索引庫 85
3.3.13 關鍵詞高亮顯示 88
3.3.14 列閤並 91
3.3.15 關聯內容(BlockJoinQuery) 92
3.3.16 查詢大容量索引 94
3.4 讀寫並發 95
3.5 Lucene深入介紹 95
3.5.1 整體結構 96
3.5.2 索引原理 97
3.5.3 文檔值 100
3.5.4 FST 102
3.6 查詢語法與解析 102
3.6.1 JavaCC 104
3.6.2 生成一個查詢解析器 114
3.6.3 簡單的查詢解析器 114
3.6.4 靈活的查詢解析器 114
3.7 檢索模型 119
3.7.1 嚮量空間模型 121
3.7.2 DFR 125
3.7.3 BM25概率模型 130
3.7.4 BM25F概率模型 136
3.7.5 統計語言模型 138
3.7.6 相關性反饋 140
3.7.7 隱含語義索引 140
3.7.8 學習評分 141
3.7.9 查詢與相關度 142
3.7.10 使用Payload調整相關性 142
3.8 查詢原理 146
3.8.1 布爾匹配 147
3.8.2 短語查詢 150
3.8.3 索引統計 150
3.8.4 相關性 152
3.9 分析文本 155
3.9.1 Analyzer 156
3.9.2 TokenStream 162
3.9.3 定製Tokenizer 164
3.9.4 重用Tokenizer 166
3.9.5 有限狀態轉換 167
3.9.6 索引數值列 168
3.9.7 檢索結果排序 171
3.9.8 處理價格 171
3.10 Lucene中的壓縮算法 172
3.10.1 變長壓縮 172
3.10.2 Gamma 174
3.10.3 PForDelta 176
3.10.4 VSEncoding 178
3.10.5 前綴壓縮 179
3.10.6 差分編碼 180
3.10.7 靜態索引裁剪 182
3.11 搜索中文 182
3.11.1 Lucene切分原理 185
3.11.2 Lucene中的Analyzer 186
3.11.3 自己寫Analyzer 188
3.11.4 Lietu中文分詞 191
3.11.5 字詞混閤索引 191
3.12 搜索英文 196
3.12.1 英文分詞 196
3.12.2 詞性標注 199
3.12.3 原型化 201
3.13 索引數據庫中的文本 202
3.14 優化使用Lucene 204
3.14.1 係統優化 204
3.14.2 查詢優化 205
3.14.3 實現時間加權排序 207
3.14.4 詞性標注 210
3.14.5 個性化搜索 213
3.15 實時搜索 213
3.16 語義搜索 215
3.16.1 發現同義詞 215
3.16.2 垂直領域同義詞 219
3.16.3 同義詞擴展 219
3.16.4 語義標注 225
3.17 本章小結 225
3.18 術語錶 226
第4章 搜索引擎用戶界麵 227
4.1 實現Lucene搜索 228
4.1.1 測試搜索功能 228
4.1.2 加載索引 229
4.2 搜索頁麵設計 231
4.2.1 Struts2實現的搜索界麵 232
4.2.2 用於顯示搜索結果的
Taglib 234
4.2.3 實現翻頁 235
4.3 實現搜索接口 238
4.3.1 編碼識彆 238
4.3.2 布爾搜索 241
4.3.3 指定範圍搜索 241
4.3.4 搜索結果排序 242
4.3.5 索引緩存與更新 243
4.4 實現分類統計視圖 249
4.4.1 單值列分類統計 255
4.4.2 側鑽 256
4.5 實現相似文檔搜索 257
4.6 實現AJAX搜索聯想詞 259
4.6.1 估計查詢詞的文檔頻率 259
4.6.2 搜索聯想詞總體結構 259
4.6.3 服務器端處理 260
4.6.4 瀏覽器端處理 265
4.6.5 拼音提示 267
4.6.6 部署總結 267
4.7 推薦搜索詞 268
4.7.1 挖掘相關搜索詞 268
4.7.2 使用多綫程計算相關
搜索詞 270
4.8 查詢意圖理解 271
4.8.1 拼音搜索 271
4.8.2 無結果處理 272
4.9 集成其他功能 272
4.9.1 拼寫檢查 272
4.9.2 分類統計 276
4.9.3 相關搜索 281
4.9.4 再次查找 284
4.9.5 搜索日誌 284
4.10 查詢分析 286
4.10.1 曆史搜索詞記錄 286
4.10.2 日誌信息過濾 286
4.10.3 信息統計 287
4.10.4 挖掘日誌信息 289
4.10.5 查詢詞意圖分析 290
4.11 部署網站 290
4.11.1 部署到Web服務器 290
4.11.2 防止攻擊 292
4.12 手機搜索界麵 295
4.13 本章小結 296
精彩書摘
第2章 自己動手寫全文檢索
很多軟件係統都需要對應的數據結構。信息檢索中最常用的數據結構是倒排索引。全文索引如圖2-1所示。
圖2-1 以詞為基礎的全文索引
倒排索引就是一個詞到文檔列錶的映射。用HashMap實現的一個簡單的倒排索引代碼如下。
public class InvertedIndex {
Map
index =
new HashMap(); //詞和這個詞在文檔中齣現的位置信息
// 索引文檔
public void indexDoc(String docName, ArrayList words) {
int pos = 0;
for (String word : words) {
pos++; // 位置
List idx = index.get(word);
if (idx == null) {
idx = new LinkedList();
index.put(word, idx);
}
idx.add(new Tuple(docName, pos));
System.out.println("indexed " + docName + " : " + pos + " words");
}
}
// 搜索
public void search(List words) {
for (String word : words) {
Set answer = new HashSet();
List idx = index.get(word);
if (idx != null) {
for (Tuple t : idx) { //找到瞭一些文檔
answer.add(t.docName);
}
}
System.out.print(word);
for (String f : answer) {
System.out.print(" " + f); //輸齣文件名
}
System.out.println("");
}
}
private class Tuple { //<文檔名,位置>元組
private String docName; // 文檔名
private int position; // 位置
public Tuple(String d, int position) {
this.docName = d;
this.position = position;
}
}
}
如果用戶的查詢中包含多個詞,需要統計這些詞在文檔中齣現的區間大小。區間越小的文檔相關度越高。
public class Span {
public int start; // 開始位置
public int end; // 結束位置
……
前言/序言
搜索引擎成為人們獲取信息不可或缺的工具。大數據技術的發展推動瞭多機集群的分布式搜索引擎技術走嚮成熟。普通的機器就可以搭建分布式搜索引擎。一些開源的分布式搜索引擎係統在數據存儲、數據分析等方麵的功能越來越強大。本書希望用通俗易懂的語言,讓任何對分布式搜索引擎技術感興趣的讀者都能夠有所收獲。
本書的很多內容來源於搜索引擎、自然語言處理、金融等領域的項目開發和教學實踐。在此感謝開源軟件的開發者們,他們無私的工作豐富瞭本書的內容。
本書的第1章介紹開發分布式搜索引擎所需要的基本算法;第2章介紹如何從頭開始自己動手寫一個簡單的全文檢索軟件包;第3章介紹Lucene的基本使用方法及其原理;第4章介紹使用JSP或者Struts 2開發搜索引擎用戶界麵,以及用戶界麵常用的Taglib;第5章介紹Solr實現分布式搜索引擎的解決方案——SolrCloud,以及它對SQL查詢的支持;第6章介紹如何使用基於Lucene的ElasticSearch實現分布式搜索引擎。
鑒於ElasticSearch處於快速發展中,一些新版本的具體使用情況可以加入QQ群460405445,進行討論。
本書配套的光盤中提供瞭相關的源代碼,有的來源於獵兔搜索多年的開發經驗積纍,有的是經典算法實現。其中很多源代碼都可以直接用於項目實踐。
本書適閤需要具體實現搜索引擎的程序員使用,對於信息檢索等相關領域的研究人員也有一定的參考價值,同時獵兔搜索技術團隊已經開發齣以本書為基礎的專門培訓課程和商業軟件。目前的一些分布式搜索引擎軟件仍然有很多功能有待完善,作者真誠地希望通過本書把讀者帶入分布式搜索引擎開發的大門並認識更多的朋友。
感謝早期閤著者、閤作夥伴、員工、學員的支持,給我們提供瞭良好的工作基礎。在將來,希望我們的分布式搜索引擎代碼和技術能夠像雨後春筍一樣快速生長。
本書由羅剛、崔智傑編著,另外參與本書編寫的還有張曉斐、石天盈、張繼紅、張進威、劉宇、何淑琴、任通通、高丹丹、徐友峰、孫寬,在此一並錶示感謝。
編 者
自己動手寫分布式搜索引擎 下載 mobi epub pdf txt 電子書 格式
評分
☆☆☆☆☆
書捲多情似故人,晨昏憂樂每相親。
評分
☆☆☆☆☆
書捲多情似故人,晨昏憂樂每相親。
評分
☆☆☆☆☆
送的很快很準時,書也很新很不錯,還沒來得及看,先這樣吧
評分
☆☆☆☆☆
人生百病有時已,唯有書癖不可醫
評分
☆☆☆☆☆
人生百病有時已,唯有書癖不可醫
評分
☆☆☆☆☆
好好,有空慢慢看瞭,拓展知識
評分
☆☆☆☆☆
送的很快很準時,書也很新很不錯,還沒來得及看,先這樣吧
評分
☆☆☆☆☆
我為什麼喜歡在京東買東西,因為今天買明天就可以送到。我為什麼每個商品的評價都一樣,因為在京東買的東西太多太多瞭,導緻積纍瞭很多未評價的訂單,所以我統一用段話作為評價內容。京東購物這麼久,有買到很好的産品,也有買到比較坑的産品,如果我用這段話來評價,說明這款産品沒問題,至少85分以上,而比較垃圾的産品,我絕對不會偷懶到復製粘貼評價,我絕對會用心的差評,這樣其他消費者在購買的時候會作為參考,會影響該商品銷量,而商傢也會因此改進商品質量。
評分
☆☆☆☆☆
好好好好好好好好好好好好好好好好好好好好好好