搜索引擎與程序化廣告:原理、設(shè)計(jì)與實(shí)戰(zhàn)
定 價(jià):109.8 元
當(dāng)前圖書(shū)已被 24 所學(xué)校薦購(gòu)過(guò)!
查看明細(xì)
- 作者:楊敏
- 出版時(shí)間:2023/9/1
- ISBN:9787115617002
- 出 版 社:人民郵電出版社
- 中圖法分類(lèi):F713.80
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:
- 開(kāi)本:128開(kāi)
本書(shū)從源碼的角度講解搜索技術(shù)與程序化廣告系統(tǒng),將技術(shù)與業(yè)務(wù)結(jié)合、理論與實(shí)踐并重,幫助讀者更好地理解并掌握相關(guān)知識(shí)。
本書(shū)首先從基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)出發(fā),帶領(lǐng)讀者深入理解線(xiàn)性結(jié)構(gòu)、樹(shù)結(jié)構(gòu)和圖結(jié)構(gòu)的搜索算法,以及它們的典型應(yīng)用場(chǎng)景。其次詳細(xì)分析全文搜索引擎工具包Lucene,包括其索引結(jié)構(gòu)、分析器、搜索與排名機(jī)制,以及Lucene的底層數(shù)據(jù)結(jié)構(gòu)與算法。最后,本書(shū)從搜索技術(shù)過(guò)渡到程序化廣告,介紹程序化廣告系統(tǒng)中的各個(gè)模塊和工作機(jī)制,包含廣告檢索、廣告庫(kù)存預(yù)測(cè)、廣告定位、廣告標(biāo)簽?zāi)0、廣告實(shí)時(shí)競(jìng)價(jià)、廣告實(shí)時(shí)數(shù)據(jù)、廣告事件流聚合、廣告供應(yīng)鏈透明度等內(nèi)容。
本書(shū)適合從事搜索技術(shù)、程序化廣告相關(guān)工作或?qū)ο嚓P(guān)內(nèi)容感興趣的軟件開(kāi)發(fā)人員閱讀。在閱讀本書(shū)之前,讀者需要具備基本的編程能力。
(1)理論與實(shí)踐并重——本書(shū)是市面上少有的從源碼角度講解搜索引擎與程序化廣告技術(shù)的圖書(shū)。
(2)技術(shù)與業(yè)務(wù)相結(jié)合——系統(tǒng)性地介紹程序化廣告相關(guān)的各項(xiàng)業(yè)務(wù)及其用到的技術(shù)知識(shí)。
(3)知識(shí)深入淺出——從基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)出發(fā),循序漸進(jìn)講解搜索算法及其應(yīng)用。
(4)內(nèi)容系統(tǒng)全面——涵蓋Lucene索引創(chuàng)建、查詢(xún)解析、搜索排名,以及底層數(shù)據(jù)結(jié)構(gòu)與算法。
(5)作者經(jīng)驗(yàn)豐富——本書(shū)作者在專(zhuān)門(mén)提供互聯(lián)網(wǎng)視頻廣告投放、預(yù)測(cè)、增值等解決方案的公司Freewheel擔(dān)任廣告供應(yīng)方平臺(tái)(Supply Side Platform,SSP)的技術(shù)負(fù)責(zé)人、軟件架構(gòu)師。
(6)業(yè)內(nèi)大咖推薦——微軟Bing首席工程師、阿里P9技術(shù)總監(jiān)、FreeWheel技術(shù)副總裁等多位技術(shù)專(zhuān)家鼎力推薦。
楊敏,畢業(yè)于浙江大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè),目前就職于一家專(zhuān)門(mén)提供互聯(lián)網(wǎng)視頻廣告投放、預(yù)測(cè)和增值等解決方案的公司——Freewheel,擔(dān)任廣告供應(yīng)方平臺(tái)(Supply Side Platform,SSP)的技術(shù)負(fù)責(zé)人、軟件架構(gòu)師。他曾在美國(guó)道富銀行、微軟、Thoughtworks等公司工作,擁有豐富的程序化廣告產(chǎn)品開(kāi)發(fā)與設(shè)計(jì)經(jīng)驗(yàn)。他曾參與或主持開(kāi)發(fā)過(guò)的項(xiàng)目有:
·美國(guó)道富銀行的普林斯頓金融系統(tǒng);
·普華永道全球派遣服務(wù)軟件系統(tǒng);
·微軟SharePoint平臺(tái)的搜索系統(tǒng);
·Freewheel的廣告供應(yīng)方平臺(tái)Stickyads.tv。
他目前專(zhuān)注于Python/Java虛擬機(jī)、分布式搜索引擎Elasticsearch、MySQL內(nèi)核等相關(guān)技術(shù)領(lǐng)域的研究。
第 1 章 搜索技術(shù)的算法 1
1.1 背景 1
1.2 字符串搜索 2
1.2.1 概述 2
1.2.2 基礎(chǔ)字符串搜索算法:暴力搜索算法 2
1.2.3 中級(jí)字符串搜索算法:KMP 算法 4
1.2.4 高級(jí)字符串搜索算法:BM 算法 9
1.2.5 字符串精確搜索:Grep 12
1.2.6 字符串模糊搜索 12
1.3 樹(shù)搜索 19
1.3.1 概述 19
1.3.2 二叉搜索樹(shù) 21
1.3.3 2-3-4 樹(shù) 22
1.3.4 2-3-4 樹(shù)與紅黑樹(shù)的等價(jià)關(guān)系 28
1.3.5 紅黑樹(shù)操作 34
1.3.6 紅黑樹(shù)典型應(yīng)用場(chǎng)景 50
1.4 圖搜索 50
1.4.1 概述 50
1.4.2 圖建模中,鄰接矩陣和鄰接表哪種結(jié)構(gòu)更好? 51
1.4.3 DFS 在圖搜索和樹(shù)搜索中的應(yīng)用 53
1.4.4 DFS 無(wú)向圖連通分量問(wèn)題 55
1.4.5 DFS 單源路徑問(wèn)題 58
1.4.6 BFS 單源(最短)路徑問(wèn)題 61
1.4.7 DFS 檢測(cè)無(wú)向圖中的環(huán) 64
1.4.8 二分圖檢測(cè)與染色算法 66
1.4.9 拓?fù)渑判? 68
1.4.10 動(dòng)態(tài)規(guī)劃和遞歸之間的關(guān)系 72
1.5 小結(jié) 73
第 2 章 Lucene 基礎(chǔ) 75
2.1 背景 75
2.2 Lucene 與傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù) 76
2.2.1 Lucene 與傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)的異同 76
2.2.2 Lucene 的全文搜索機(jī)制 77
2.2.3 倒排索引的使用場(chǎng)景 78
2.3 Lucene 與 Elasticsearch 79
2.4 Lucene 的倒排索引設(shè)計(jì) 80
2.4.1 倒排索引 80
2.4.2 Posting 數(shù)據(jù)結(jié)構(gòu) 80
2.4.3 ByteBlockPool 動(dòng)態(tài)數(shù)組 81
2.4.4 Posting 與 ByteBlockPool 的關(guān)系 83
2.4.5 ThreadState 結(jié)構(gòu) 84
2.4.6 DocumentsWriter 結(jié)構(gòu) 85
2.5 Lucene 的正排索引設(shè)計(jì) 92
2.5.1 正排索引與倒排索引 92
2.5.2 Lucene 的正排索引與數(shù)學(xué)中的向量的關(guān)系 93
2.5.3 正排索引存儲(chǔ) 94
2.5.4 索引數(shù)據(jù)的寫(xiě)流程 96
2.6 有效負(fù)載 97
2.6.1 有效負(fù)載的結(jié)構(gòu) 97
2.6.2 有效負(fù)載的格式 98
2.6.3 文檔權(quán)重與域權(quán)重 99
2.6.4 權(quán)重與有效負(fù)載 99
2.6.5 有效負(fù)載的應(yīng)用場(chǎng)景 100
2.7 復(fù)合索引文件 103
2.7.1 復(fù)合索引的文件格式 104
2.7.2 寫(xiě)復(fù)合索引文件 105
2.8 小結(jié) 106
第 3 章 Lucene 索引段 108
3.1 背景 108
3.2 不同索引結(jié)構(gòu)的比較 108
3.2.1 MySQL:B+樹(shù) 109
3.2.2 MySQL:哈希索引 109
3.2.3 Redis:跳表 109
3.2.4 Lucene:倒排索引 111
3.3 索引段的基礎(chǔ)知識(shí) 112
3.3.1 概述 112
3.3.2 SegmentInfos 容器 113
3.3.3 IndexReader 116
3.3.4 SegmentReader 118
3.3.5 倒排索引格式 119
3.3.6 索引段的讀流程 124
3.4 索引段的合并 126
3.4.1 概述 126
3.4.2 段合并的典型問(wèn)題 127
3.4.3 段合并的策略 129
3.4.4 段合并的簡(jiǎn)單流程 132
3.4.5 合并段內(nèi)域:mergeFields 135
3.4.6 合并段內(nèi)分詞:mergeTerms 143
3.4.7 合并段內(nèi)詞向量:mergeVectors 154
3.5 索引段提交點(diǎn)與快照 155
3.5.1 概述 155
3.5.2 提交點(diǎn) 155
3.5.3 快照 158
3.5.4 觸發(fā)快照的場(chǎng)景 159
3.6 索引段刪除文檔 160
3.6.1 概述 160
3.6.2 del 擴(kuò)展文件 160
3.6.3 位向量 162
3.6.4 索引段刪除分詞 164
3.6.5 索引段查詢(xún)分詞 165
3.7 小結(jié) 166
第 4 章 Lucene 分析器 167
4.1 背景 167
4.2 Field、Token 與 Term 概念 168
4.3 JavaCC 與查詢(xún)解析器 170
4.3.1 Yacc 與 JavaCC 170
4.3.2 在 JavaCC 中擴(kuò)展正則表達(dá)式 171
4.3.3 JavaCC 的輸入文件之XX.jj 172
4.3.4 Lucene 中 Token 的正則表達(dá)式定義 173
4.3.5 Lucene 語(yǔ)法產(chǎn)生式:分析與生成查詢(xún) 175
4.3.6 getFieldQuery 公共函數(shù) 181
4.4 分析器 184
4.4.1 概述 184
4.4.2 分析器的組成:分詞器和過(guò)濾器 185
4.4.3 分析器的兩個(gè)典型場(chǎng)景 187
4.4.4 索引的構(gòu)建流程 188
4.4.5 QueryParse 查詢(xún)流程 188
4.4.6 位置增量 190
4.5 中文分詞器 195
4.5.1 概述 195
4.5.2 中文分詞器的思想 196
4.5.3 sego 中文分詞器 198
4.5.4 雙數(shù)組前綴樹(shù)算法 204
4.5.5 維特比算法 210
4.5.6 迪杰斯特拉算法 210
4.6 小結(jié) 213
第 5 章 Lucene 搜索與排名 214
5.1 背景 214
5.2 搜索結(jié)果排名 215
5.2.1 TF-IDF 模型 215
5.2.2 余弦相似性 219
5.3 過(guò)濾器 220
5.3.1 概述 220
5.3.2 過(guò)濾 220
5.3.3 CachingWrapperFilter 225
5.3.4 創(chuàng)建自定義過(guò)濾器 226
5.3.5 過(guò)濾與查詢(xún)的區(qū)別 227
5.4 全文搜索 227
5.4.1 概述 227
5.4.2 Query、Weight 和 Scorer 對(duì)象樹(shù) 228
5.4.3 搜索流程(關(guān)閉過(guò)濾器) 230
5.5 短語(yǔ)搜索:相關(guān)性搜索 246
5.5.1 概述 246
5.5.2 一個(gè)查詢(xún)短語(yǔ)舉例 246
5.5.3 TermPositions 與 TermDocs 250
5.5.4 PhraseQuery 類(lèi)體系 250
5.5.5 PhraseScorer 工作流 251
5.5.6 MultiPhraseQuery 259
5.6 模糊搜索:利用模糊性改善搜索性能 259
5.6.1 概述 259
5.6.2 編輯距離算法 259
5.6.3 FuzzyQuery 工作流 261
5.7 小結(jié) 265
第 6 章 Lucene 的底層數(shù)據(jù)結(jié)構(gòu)與算法 266
6.1 背景 266
6.2 編碼與壓縮算法 268
6.2.1 概述 268
6.2.2 前綴編碼 268
6.2.3 增量編碼 269
6.2.4 變長(zhǎng)字節(jié)編碼 270
6.3 跳表結(jié)構(gòu):分層有序鏈表 271
6.3.1 概述 271
6.3.2 跳表的定義與規(guī)則 272
6.3.3 從單鏈表到跳表 273
6.3.4 跳表的特點(diǎn) 274
6.3.5 frq 索引文件中的跳表設(shè)計(jì) 275
6.3.6 索引的設(shè)計(jì)思想:空間換時(shí)間 276
6.3.7 MultiLevelSkipListWriter 類(lèi)的相關(guān)狀態(tài) 277
6.3.8 MultiLevelSkipListWriter 類(lèi)的相關(guān)操作 279
6.3.9 MultiLevelSkipListReader 類(lèi)的相關(guān)狀態(tài)和操作 285
6.4 ByteSliceReader 結(jié)構(gòu) 288
6.4.1 概述 288
6.4.2 ByteBlockPool 數(shù)據(jù)結(jié)構(gòu) 289
6.4.3 ByteBlockPool 使用數(shù)組來(lái)模擬鏈表 293
6.4.4 Posting 倒排列表與 ByteBlockPool 的關(guān)系 294
6.4.5 ByteSliceReader 數(shù)據(jù)結(jié)構(gòu) 295
6.5 ByteBlockPool 結(jié)構(gòu):數(shù)組模擬鏈表 296
6.5.1 概述 296
6.5.2 數(shù)組如何模擬鏈表 296
6.5.3 鏈表與數(shù)組 298
6.5.4 線(xiàn)性與非線(xiàn)性結(jié)構(gòu) 298
6.5.5 ByteBlockPool 再思考 299
6.6 小結(jié) 300
第 7 章 廣告檢索與定位 302
7.1 背景 302
7.2 全文索引和檢索 302
7.2.1 概述 302
7.2.2 全文索引模型 303
7.2.3 檢索模型 303
7.2.4 關(guān)系數(shù)據(jù)庫(kù)中索引的設(shè)計(jì) 305
7.2.5 一個(gè)簡(jiǎn)單倒排索引的設(shè)計(jì) 306
7.3 位圖索引 307
7.3.1 概述 307
7.3.2 位圖索引結(jié)構(gòu) 307
7.3.3 位圖索引中的編碼 309
7.3.4 位圖索引的構(gòu)建與查詢(xún) 310
7.3.5 對(duì)倒排文本進(jìn)行位圖索引 313
7.4 用 Be_indexer 開(kāi)源框架實(shí)現(xiàn)廣告索引 313
7.4.1 文檔類(lèi)體系 313
7.4.2 FieldDesc 類(lèi)體系 315
7.4.3 字典編碼 315
7.4.4 Be_indexer 框架的基本流程 318
7.4.5 Be_indexer框架的倒排索引 325
7.5 程序化廣告概述 326
7.5.1 程序化廣告是什么? 326
7.5.2 程序化廣告系統(tǒng)的主要模塊 327
7.6 廣告檢索 328
7.6.1 概述 328
7.6.2 廣告選擇:用布爾邏輯表達(dá)式實(shí)現(xiàn) 328
7.6.3 廣告選擇:用 DNF 實(shí)現(xiàn) 329
7.6.4 用 Clorisearch 開(kāi)源框架實(shí)現(xiàn)廣告檢索 332
7.7 廣告庫(kù)存預(yù)測(cè) 342
7.7.1 概述 342
7.7.2 定向廣告和重定向廣告 342
7.7.3 命題邏輯基礎(chǔ) 343
7.7.4 DNF 的應(yīng)用 347
7.7.5 廣告庫(kù)存預(yù)測(cè):用 DNF 算法實(shí)現(xiàn) 350
7.8 廣告定位:用戶(hù)身份圖構(gòu)建與搜索 351
7.8.1 概述 351
7.8.2 Cookie 352
7.8.3 同一用戶(hù)在不同平臺(tái)中的身份匹配:用戶(hù)匹配表 354
7.8.4 演進(jìn) 1:集中式 Cookie 同步技術(shù) 355
7.8.5 演進(jìn) 2:用戶(hù)身份圖 357
7.9 廣告定位:通過(guò) DMP 幫助用戶(hù)匹配正確的廣告 361
7.9.1 概述 361
7.9.2 DMP 的基礎(chǔ)知識(shí) 361
7.9.3 DMP 分段 362
7.9.4 DMP 和 DSP 的協(xié)同工作 364
7.9.5 DMP 的用戶(hù)數(shù)據(jù)在 DSP 中的使用場(chǎng)景 364
7.10 小結(jié) 367
第 8 章 程序化廣告技術(shù) 369
8.1 背景 369
8.2 廣告標(biāo)簽?zāi)0? 370
8.2.1 VAST 工作流程 371
8.2.2 VAST 格式 371
8.3 廣告實(shí)時(shí)競(jìng)價(jià) 373
8.3.1 RTB 工作流程 373
8.3.2 投標(biāo)請(qǐng)求 374
8.3.3 投標(biāo)響應(yīng) 378
8.4 廣告實(shí)時(shí)數(shù)據(jù) 380
8.4.1 廣告日志數(shù)據(jù) 380
8.4.2 廣告生命周期:事件流 381
8.4.3 廣告數(shù)據(jù)聚合 382
8.5 廣告事件流聚合 384
8.5.1 概述 384
8.5.2 需求 384
8.5.3 解決思路:數(shù)據(jù)管道架構(gòu) 385
8.5.4 方案 1 - 數(shù)據(jù)管道:Kafka 385
8.5.5 方案 2 - 數(shù)據(jù)管道:Kafka + Cassandra 386
8.5.6 方案 3 - 數(shù)據(jù)管道:Kafka + Spark + Cassandra 387
8.5.7 方案 4 - 數(shù)據(jù)管道:Kafka + Spark + Cassandra + Data-Version 390
8.6 廣告供應(yīng)鏈透明度分析 392
8.6.1 Ads.txt 392
8.6.2 Seller.json 394
8.6.3 供應(yīng)鏈對(duì)象 394
8.6.4 Ads.txt、Seller.json 和供應(yīng)鏈對(duì)象的關(guān)系 395
8.7 小結(jié) 396