《开发自己的搜索引擎 Lucene+Heritrix》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:邱哲,符滔滔,王学松编著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2010
  • ISBN:9787115215291
  • 页数:562 页
图书介绍:本书讲解如何使用Lucene和Heritrix来构建搜索引擎,通过对API和源代码的分析,力求使读者在应用的基础上,能够深入其核心,自行扩展和开发相应组件,发挥想象力,开发出更具有创意的搜索引擎产品。

第1章 搜索引擎与信息检索 1

1.1搜索引擎的历史 1

1.1.1萌芽:Archie、Gopher 1

1.1.2起步:Robot(网络机器人)的出现与Spider(网络爬虫) 3

1.1.3发展:Excite、Galaxy、Yahoo等 4

1.1.4繁荣:Infoseek、AltaVista、Google和Baidu 6

1.2信息检索系统的基本知识 9

1.2.1信息检索系统 9

1.2.2信息检索的过程 11

1.2.3传统查找的优点和不足 12

1.2.4使用索引提高检索速度 12

1.2.5倒排索引 13

1.2.6评价信息检索系统的标准 14

1.3 Lucene的简介 14

1.4小结 15

第2章Lucene入门实例 16

2.1实例介绍 16

2.1.1实例说明 16

2.1.2开发过程 16

2.2准备工作 17

2.2.1将文档的全角标点转成半角标点 17

2.2.2将大文档切分成多个小文档 20

2.2.3预处理源文件的统一接口 21

2.3创建Eclipse工程 22

2.3.1准备工作 22

2.3.2创建工程并引入Lucene的JAR包 24

2.3.3运行文档预处理类 31

2.3.4创建处理文档的索引类:IndexProcessor 32

2.3.5创建检索索引的搜索类 34

2.4运行效果 38

2.5小结 41

第3章 索引的建立 42

3.1 Document逻辑文件 42

3.1.1 Lucene的Document 42

3.1.2为Document添加多种Field 43

3.1.3 Document的内部实现 45

3.2 Field的内部实现 46

3.2.1 Field包含的类 47

3.2.2 Field类的构造方法 48

3.3 Lucene的索引工具IndexWriter 49

3.3.1 IndexWriter的初始化 50

3.3.2向索引添加文档 52

3.3.3限制每个Field中的词条的数量 53

3.4 Lucene索引过程详解 54

3.4.1 Lucene索引建立过程概览 54

3.4.2使用addDocument方法向索引添加文档 55

3.4.3 DocumentWriter的addDocument方法 57

3.4.4文档的倒排 62

3.4.5对postingTable进行排序 66

3.4.6将Posting信息写入索引 68

3.5索引文件格式 68

3.5.1索引的segment 69

3.5.2 .fnm格式 69

3.5.3 .fdx与fdt格式 70

3.5.4 .tii与.tis格式 71

3.5.5 deletable格式 71

3.5.6 复合索引格式.cfs 71

3.6索引过程的调优 72

3.6.1合并因子mergeFactor 72

3.6.2 maxMergeDocs 73

3.6.3 minMergeDocs 73

3.7索引的合并与索引的优化 74

3.7.1 FSDirectory与RAMDirectory 74

3.7.2使用IndexWriter来合并索引 75

3.7.3索引的优化 76

3.8从索引中删除文档 78

3.8.1索引的读取工具Index-Reader 78

3.8.2使用文档ID号来删除特定文档 81

3.8.3使用Field信息来删除批量文档 84

3.9 Lucene的同步问题 85

3.9.1为什么要进行同步以及Lucene的同步法则 85

3.9.2 commit.lock与write.lock 85

3.10 Lucene 2.0的新类:IndexModifier类 86

3.11小结 87

第4章Lucene搜索 88

4.1使用IndexSearcher进行搜索 88

4.1.1初始化IndexSearcher 88

4.1.2 IndexSearcher的最简单使用 89

4.1.3 IndexSearcher的多种search方法 90

4.2 Hits类详解 92

4.2.1 Hits类的公有接口 92

4.2.2效率分析 93

4.2.3 Hits内部的缓存 95

4.2.4 Hits类的工作原理 98

4.3对搜索结果的评分 98

4.3.1文档与词条的向量空间 98

4.3.2 Lucene的文档得分算法 99

4.4构建各种Lucene内建的Query对象 103

4.4.1 toString:查看原子查询 103

4.4.2查询重写与权重 103

4.4.3 TermQuery词条搜索 104

4.4.4 BooleanQuery布尔搜索 105

4.4.5 RangeQuery范围搜索 113

4.4.6 PrefixQuery前缀搜索 117

4.4.7 PhraseQuery:短语搜索 119

4.4.8 MultiPhraseQuery:多短语搜索 123

4.4.9 FuzzyQuery模糊搜索 128

4.4.10 WildcardQuery通配符搜索 131

4.4.11 SpanQuery跨度搜索 132

4.5第三方提供的Query对象:RegexQuery 140

4.6通过QueryParser转换用户关键字 142

4.6.1词条的定义 143

4.6.2 QueryParser初始化 143

4.6.3改变QueryParser默认的布尔逻辑 144

4.6.4短语和QueryParser 145

4.6.5 FuzzyQuery和QueryParser 147

4.6.6通配符与QueryParser 147

4.6.7查找指定的Field 148

4.6.8 RangeQuery与QueryParser 151

4.6.9 QueryParser和SpanQuery 152

4.7多Field搜索与多索引搜索 153

4.7.1多域搜索MultiFieldQuery-Parser 153

4.7.2 MultiSearcher在多个索引上搜索 155

4.7.3 ParalellMultiSearcher:多线程搜索 158

4.7.4 Searchable和RMI 161

4.8小结 162

第5章 排序、过滤和分页 163

5.1相关度排序 163

5.1.1使用Score进行自然排序 163

5.1.2 Searcher的explain方法 165

5.1.3通过改变boost值来改变文档的得分 166

5.2使用Sort来排序 170

5.2.1 Sort简介 170

5.2.2 SortField 171

5.2.3按文档得分进行排序 172

5.2.4按文档的内部ID号来排序 175

5.2.5按一个或多个Field来排序 175

5.2.6改变SortField中的Locale信息 182

5.3搜索的过滤器 183

5.3.1过滤器的基本结构 183

5.3.2一个简单的Filter:建立索引 184

5.3.3一个简单的Filter:打印索引文档信息 186

5.3.4一个简单的Filter:安全级别与过滤器代码 187

5.3.5一个简单的Filter:在搜索时应用过滤器 188

5.3.6一个简单的Filter:总结 190

5.3.7按范围过滤RangeFilter 190

5.3.8在结果中查询QueryFilter 194

5.3.9缓存结果:Caching-WrapperFilter 197

5.4翻页问题 198

5.4.1依赖于session的翻页 198

5.4.2多次查询 198

5.4.3缓存+多次查询 199

5.4.4缓存+多次查询+数据库 199

5.5小结 200

第6章Lucene的分析器 201

6.1分析 201

6.1.1分词 201

6.1.2 Lucene的分析器结构 202

6.1.3 Lucene的分析器实现 204

6.2 Lucene与JavaCC 205

6.2.1 JavaCC简介 205

6.2.2 JavaCC为Lucene提供的分析器脚本 206

6.2.3 Lucene的标准分析器 210

6.2.4标准过滤器:Standard-Filter 211

6.2.5大小写转换器:Lower-CaseFilter 212

6.2.6忽略词过滤器:Stop Filter 213

6.3分析器的进阶 213

6.3.1再看StandardAnalyzer中的管道过滤器结构 214

6.3.2长度过滤器:LengthFilter 214

6.3.3 PerFieldAnalyzerWrapper 215

6.3.4其他 215

6.4对中文的分析 216

6.4.1现有的中文分词方式简介 216

6.4.2中科院的分词软件和JE分词 218

6.5小结 224

第7章Word、Excel和PDF的处理 225

7.1使用PDFBox处理PDF文档 225

7.1.1 PDFBox的下载 225

7.1.2在Eclipse中配置 226

7.1.3使用PDFBox解析PDF内容 227

7.1.4运行效果 228

7.1.5与Lucene的集成 230

7.2使用xpdf来处理中文PDF文档 232

7.2.1 xpdf的下载 232

7.2.2配置 232

7.2.3提取中文 233

7.2.4运行效果 236

7.3使用POI来处理Excel和Word文件格式 237

7.3.1对Excel的处理类 237

7.3.2 ExcelReader的运行效果 241

7.3.3 POI中Excel文件Cell的类型 243

7.3.4对Word的处理类 245

7.4使用Jacob来处理Word文档 247

7.4.1 Jacob的下载 247

7.4.2在Eclipse中配置 247

7.5小结 249

第8章Compass:封装了Lucene的框架 250

8.1 Compass简介 250

8.1.1 Compass的下载 250

8.1.2 Compass的代码片断 250

8.2 Compass的初始配置 252

8.2.1Compass的配置文件 252

8.2.2将索引存放于内存中 253

8.2.3使用JDBC来存储索引 253

8.2.4使用连接池来存储索引 254

8.2.5加载compass.cfg.xml文件 255

8.3域模型的配置 255

8.3.1实体代码 255

8.3.2实体关系 261

8.3.3实体Book的配置文件 262

8.3.4通用元数据定义文件(.cmd.xml) 263

8.3.5 Author和Article的配置文件 267

8.4使用Compass来建立索引 269

8.4.1索引代码 269

8.4.2对象关系图和运行结果 271

8.5使用Compass来搜索 272

8.5.1使用find()方法搜索 272

8.5.2 CompassHits类型 273

8.5.3 CompassHit类型 274

8.5.4使用Lucene语法来查找 275

8.6配置Analyzer和Optimizer 276

8.7小结 277

第9章Lucene分布式 278

9.1 Lucene与分布式 278

9.1.1什么是GFS 278

9.1.2为Lucene提供分布式的几点设想 279

9.2小结 281

第10章 无比强大的网络爬虫Heritrix 282

10.1 Heritrix的使用入门 282

10.1.1下载和运行Heritrix 282

10.1.2在Eclipse里配置heritrix的开发环境 285

10.1.3创建一个新的抓取任务 290

10.1.4设置抓取时的处理链 292

10.1.5设置运行时的参数 295

10.1.6运行抓取任务 297

10.1.7 Heritrix的镜像存储结构 302

10.1.8终止抓取或终止Heritrix的运行 303

10.2 Heritrix的架构 304

10.2.1抓取任务CrawlOrder 304

10.2.2中央控制器CrawlController 305

10.2.3 Frontier链接制造工厂 308

10.2.4用Berkeley DB实现的BdbFrontier 313

10.2.5 Heritrix的多线程ToeThread和ToePool 316

10.2.6 处理链和Processor 319

10.3扩展和定制Heritrix 322

10.3.1向Heritrix中添加自己的Extractor 323

10.3.2定制Queue-assignment-policy两个问题 327

10.3.3定制Queue-assignment-policy继承QueueAssignmentPolicy类 328

10.3.4扩展FrontierScheduler来抓取特定的内容 329

10.3.5在Prefetcher中取消robots.txt的限制 330

10.4小结 331

第11章 搜索引擎综合实例:准备篇 332

11.1数码产品垂直搜索引擎实例简介 332

11.1.1垂直搜索引擎实现流程 332

11.1.2数码垂直搜索引擎搜索功能 333

11.1.3信息来源网站的选择方法 333

11.1.4太平洋电脑网和网易手机频道 334

11.2准备Eclipse的Web开发环境 335

11.2.1准备Eclipse的Web插件环境 335

11.2.2在Eclipse中配置插件 336

11.3准备垂直搜索引擎工程 337

11.3.1建立搜索引擎Eclipse工程 338

11.3.2设置搜索引擎工程上下文信息 339

11.3.3设定源代码存放和输出路径 340

11.3.4添加自定义的Java代码 341

11.3.5添加工程中引用的Jar包 343

11.3.6创建工程JSP页面文件 345

11.3.7构造完成的工程整体结构 347

11.4搜索引擎配置信息管理及相关类 349

11.4.1工程配置信息管理 349

11.4.2系统属性配置文件 350

11.4.3配置文件管理封装类 350

11.5小结 352

第12章 搜索引擎综合实例:下载篇 353

12.1数码产品网络爬虫 353

12.1.1垂直搜索引擎网络爬虫设计 353

12.1.2来源网站内容与链接分析 354

12.2数码产品信息来源列表准备 356

12.2.1太平洋电脑网待抓取内容页面分析 356

12.2.2太平洋电脑网带抓取内容代码分析 359

12.2.3太平洋电脑网手机品牌清单分析 362

12.3 Eclipse中定制数码产品Heritrix爬虫 367

12.3.1数码产品Heritrix爬虫的功能 367

12.3.2 Eclipse中导入编译Heritrix工程 368

12.3.3 Eclipse中运行Heritrix工程 370

12.4抓取pconline网页的定制扩展类 371

12.4.1抓取pconline网页的Frontier扩展 371

12.4.2执行pconline手机网页抓取任务 373

12.5抓取网易手机频道的定制扩展类 375

12.5.1网易手机频道结构分析 375

12.5.2设计网易抓取的Extractor扩展 378

12.5.3设计网易抓取的Frontier扩展 381

12.5.4执行网易手机频道网页抓取任务 382

12.6小结 383

第13章 使用正则表达式与HTMLParser分析网页 384

13.1网页内容分析方法概述 384

13.1.1网页HTML的基本知识 384

13.1.2 JDK正则表达式简介 385

13.1.3 HTMLParser开源库介绍 387

13.2正则表达式精确提取网页内容 388

13.2.1正则表达式java.util.regex使用 388

13.2.2正则表达式提取tom星座内容实例 390

13.2.3正则表达式提取pconline手机品牌列表 396

13.3 HTMLParser高效提取网页内容 398

13.3.1 HTMLParser使用准备 398

13.3.2 Lexer模式功能及实现 399

13.3.3 HTMLParser功能及实现 404

13.3.4 HTMLParser解析星座网页实例 410

13.4数码产品网页内容解析系统 413

13.4.1产品详细信息文件格式 413

13.4.2解析产品网页信息的基类Extractor 414

13.5 pconline手机产品网页内容解析 418

13.5.1 pconline手机产品页面Extractor解析器 418

13.5.2 pconline产品信息解析测试函数 421

13.5.3 pconline产品信息解析代码执行结果 422

13.6网易手机频道产品内容解析 425

13.6.1网易手机频道产品信息的Extractor解析器 425

13.6.2网易手机频道的产品信息运行测试效果 428

13.7小结 429

第14章 网页内容存储与索引 430

14.1构建产品检索名称信息词库 430

14.1.1产品名称词汇选择 430

14.1.2产品名称词库提取代码 431

14.1.3产品名称词库提取结果 433

14.2手机产品数据库与文件索引结构 434

14.2.1手机产品的存储方法 434

14.2.2手机产品信息Product类 435

14.2.3产品信息数据库存储结构 437

14.2.4产品信息Lucene索引结构 438

14.3产品信息数据库存储与处理 439

14.3.1数据库创建与准备 439

14.3.2 Java数据库基本操作 440

14.3.3数码产品数据库记录操作 441

14.4产品信息文件存储与Lucene索引 443

14.4.1数码产品Lucene索引操作设计 443

14.4.2数码产品具体索引操作代码 445

14.5产品信息综合处理与运行 446

14.5.1调用数据库处理类和索引处理类 446

14.5.2数码产品数据处理类运行 452

14.6小结 454

第15章 搜索引擎综合实例:交互篇 455

15.1 DWR的技术介绍 455

15.1.1 Ajax与DWR简介 455

15.1.2 Ajax与传统模式搜索架构 456

15.2 DWR安装与配置 457

15.2.1 DWR的下载与安装 457

15.2.2创建工程结构 458

15.2.3配置web.xml内容 460

15.2.4建立配置dwr.xml内容 461

15.3 DWR入门与实例演示 461

15.3.1简单Ajax页面代码 461

15.3.2运行效果与对比 464

15.3.3 DWR与直接使用XMLHttpRequest对象的比较 468

15.3.4在DWR中操纵自定义的对象 470

15.3.5查看DWR的输出日志 477

15.4 dwr.xml的配置进阶 477

15.4.1 dwr.xml的标准结构 478

15.4.2 <init>标签与DWR自带的converter和creator 479

15.4.3 <allow>标签 483

15.4.4 <signature>标签 484

15.4.5转换器converter 485

15.5使用DWR工具库util.js 488

15.5.1页面中调用util.js 489

15.5.2使用useLoadingMessage()方法显示提示图标 490

15.5.3 DWRUtil.setValue()和DWRUtil.getValue() 495

15.5.4 DWRUtil.getValues和DWRUtil.setValues 498

15.5.5 DWRUtil.addOptions和DWRUtil.removeAll-Options 503

15.5.6 DWRUtil.addRows和DWRUtil.removeAll-Rows 508

15.5.7 DWRUtil.toDescriptive-String方法 515

15.6小结 516

第16章 搜索引擎综合实例:Web篇 517

16.1 Web配置文件 517

16.1.1配置文件及其作用 517

16.1.2 Spring配置文件 518

16.1.3 DWR配置文件 519

16.1.4 web.xml配置文件 520

16.2各种搜索相关Bean类 521

16.2.1产品SearchResult结果记录类 522

16.2.2产品 Search Results结果集合类 524

16.2.3产品SearchRequest检索请求类 526

16.3数据库访问SearchResultDAO类实现 527

16.3.1数码库访问类接口定义 527

16.3.2数码库访问类实现 528

16.4 Lucene索引检索SearchService类实现 530

16.4.1索引检索类接口定义 530

16.4.2索引检索类实现 531

16.5前台Web页面设计 536

16.5.1数码垂直搜索主页面main.jsp 536

16.5.2数码搜索手机产品图片的显示 542

16.5.3手机产品详细信息页面detail.jsp 543

16.6实例中的问题与功能扩展 546

16.7小结 548

附录Lucene 2.4更新内容 549

F1 IndexWriter的构造函数 549

F2 IndexWriter的init方法 550

F3 IndexWriter中的flush、commit和close 552

F4 Lucene2.4中的Segment 553

F5 IndexCommit和IndexDeletion-Policy 555

F6 IndexWriter中的add-Document 558

F7 DocumentsWriter类的add-Document方法 559

F8 DocumentsWriter的索引链 562