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

  • 购买积分:16 如何计算积分?
  • 作  者:邱哲,符滔滔编著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2007
  • ISBN:7115160007
  • 页数:521 页
图书介绍:本书介绍了如何应用Lucene进行摸索引擎开发。

第一篇 搜索引擎入门 3

第1章 搜索引擎与信息检索基础 3

1.1 搜索引擎的历史 3

1.1.1 萌芽:Archie、Gopher 3

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

1.1.3 发展:Excite、Galaxy、Yahoo等 7

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

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

1.2.1 什么是信息检索系统 11

1.2.2 信息检索的过程 12

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

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

1.2.5 倒排索引 14

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

1.3 Lucene简介 16

1.4 小结 17

第二篇 Lucene开发详解 21

第2章 Lucene入门实例 21

2.1 实例介绍 21

2.1.1 实例说明 21

2.1.2 开发过程 21

2.2 准备工作 22

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

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

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

2.3 创建Eclipse工程 27

2.3.1 准备工作 27

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

2.3.3 运行文档预处理类 36

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

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

2.4 运行效果 44

2.5 小结 45

第3章 Lucene索引的建立 46

3.1 Document逻辑文件 46

3.1.1 Lucene的Document 46

3.1.2 为Document添加多种Field 47

3.1.3 Document的内部实现 49

3.2 Field的内部实现 50

3.2.1 Field包含的类 51

3.2.2 Field类的构造方法 52

3.3 Lucene的索引工具IndexWriter 54

3.3.1 IndexWriter的初始化 54

3.3.2 向索引添加文档 56

3.4 Lucene索引过程详解 58

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

3.4.1 Lucene索引建立过程概述 59

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

3.4.3 DocumentWriter的addDocument方法 61

3.4.4 文档的倒排 66

3.4.5 对postingTable进行排序 71

3.5.1 索引的segment 73

3.5.2 .fnm格式 73

3.5 索引文件格式 73

3.4.6 将Posting信息写入索引 73

3.5.3 .fdx与.fdt格式 74

3.5.4 .tii与.tis格式 75

3.5.5 deletable格式 76

3.5.6 复合索引格式.cfs 76

3.6 索引过程的优化 76

3.6.1 合并因子mergeFactor 76

3.6.2 maxMergeDocs 78

3.6.3 minMergeDocs 78

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

3.7.1 FSDirectory与RAMDirectory 78

3.7.2 使用IndexWriter来合并索引 79

3.7.3 索引的优化 81

3.8 从索引中删除文档 82

3.8.1 索引的读取工具IndexReader 83

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

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

3.9 Lucene的同步问题 89

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

3.9.2 commit.lock与write.lock 90

3.10 Lucene 2.0的新类:IndexModifier类 91

3.11 小结 92

4.1.1 初始化IndexSearcher 93

第4章 Lucene的搜索 93

4.1 使用IndexSearcher进行搜索 93

4.1.2 IndexSearcher最简单的使用 94

4.1.3 IndexSearcher的多种search方法 95

4.2 Hits类详解 97

4.2.1 Hits类的公有接口 97

4.2.2 效率分析 98

4.2.3 Hits内部的缓存 100

4.2.4 Hits类的工作原理 103

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

4.3 对搜索结果的评分 104

4.3.2 Lucene的文档得分算法 105

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

4.4.1 toString查看原子查询 109

4.4.2 查询重写与权重 109

4.4.3 TermQuery词条搜索 110

4.4.4 BooleanQuery布尔搜索 111

4.4.5 RangeQuery范围搜索 119

4.4.6 PrefixQuery前缀搜索 122

4.4.7 PhraseQuery短语搜索 125

4.4.8 MultiPhraseQuery多短语搜索 128

4.4.9 FuzzyQuery模糊搜索 133

4.4.10 WildcardQuery通配符搜索 137

4.4.11 SpanQuery跨度搜索 138

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

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

4.6.1 词条的定义 149

4.6.2 QueryParser初始化 149

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

4.6.4 短语和QueryParser 151

4.6.5 FuzzyQuery和QueryParser 152

4.6.7 查找指定的Field 153

4.6.6 通配符与QueryParser 153

4.6.8 RangeQuery与QueryParser 157

4.6.9 QueryParser和SpanQuery 158

4.7 多Field搜索与多索引搜索 159

4.7.1 多域搜索MultiFieldQueryParser 159

4.7.2 MultiSearcher在多个索引上搜索 161

4.7.3 ParalellMultiSearcher:多线程搜索 164

4.7.4 Searchable和RMI 167

4.8 小结 168

5.1.1 使用Score进行自然排序 170

5.1 相关度排序 170

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

5.1.2 Searcher的explain方法 172

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

5.2 使用Sort来排序 177

5.2.1 Sort简介 177

5.2.2 SortField 178

5.2.3 按文档得分进行排序 179

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

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

5.2.6 改变SortField中的Locale信息 190

5.3.1 过滤器的基本结构 191

5.3 搜索的过滤器 191

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

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

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

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

5.3.6 一个简单的Filter:总结 198

5.3.7 按范围过滤RangeFilter 199

5.3.8 在结果中查询QueryFilter 202

5.3.9 缓存结果:CachingWrapper Filter 205

5.4 翻页问题 206

5.4.1 依赖于session的翻页 206

5.4.3 缓存+多次查询 207

5.4.2 多次查询 207

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

5.5 小结 208

第6章 Lucene的分析器 209

6.1 分析 209

6.1.1 分词 209

6.1.2 Lucene的分析器的结构 210

6.1.3 Lucene的分析器的实现 212

6.2 Lucene与JavaCC 213

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

6.2.1 JavaCC简介 214

6.2.3 Lucene的标准分析器 218

6.2.4 标准过滤器:StandardFilter 220

6.2.5 大小写转换器:LowerCaseFilter 221

6.2.6 忽略词过滤器:StopFilter 221

6.3 分析器的进阶 222

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

6.3.2 长度过滤器:LengthFilter 223

6.3.3 PerFieldAnalyzerWrapper 223

6.4 对中文的分析 224

6.3.4 其他 224

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

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

6.5 小结 232

第三篇 Lucene相关话题 235

第7章 对Word、Excel和PDF的处理 235

7.1 使用PDFBox处理PDF文档 235

7.1.1 PDFBox的下载 235

7.1.2 在Eclipse中配置 236

7.1.3 使用PDFBox解析PDF内容 237

7.1.4 运行效果 238

7.1.5 与Lucene的集成 239

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

7.2.1 xpdf的下载 241

7.2.2 配置 242

7.2.3 提取中文 243

7.2.4 运行效果 246

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

7.3.1 对Excel的处理类 247

7.3.2 ExcelReader的运行效果 251

7.3.3 POI中Excel文件Cell的类型 252

7.3.4 对Word的处理类 254

7.4 使用Jacob来处理Word文档 256

7.4.1 Jacob的下载 256

7.4.2 在Eclipse中配置 256

7.5 小结 258

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

8.1 Compass简介 259

8.1.1 Compass的下载 259

8.1.2 Compass的代码片断 260

8.2 Compass的初始配置 261

8.2.1 Compass的配置文件 261

8.2.3 使用JDBC来存储索引 262

8.2.2 将索引存放于内存中 262

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

8.2.5 加载compass.cfg.xml文件 264

8.3 域模型的配置 265

8.3.1 实体代码 265

8.3.2 实体关系 271

8.3.3 实体Book的配置文件 271

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

8.3.5 Author和Article的配置文件 276

8.4.1 索引代码 278

8.4 使用Compass来建立索引 278

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

8.5 使用Compass来搜索 281

8.5.1 使用find()方法搜索 281

8.5.2 CompassHits类型 282

8.5.3 CompassHit类型 283

8.5.4 使用Lucene语法来查找 284

8.6 配置Analyzer和Optimizer 286

8.7 小结 287

第9章 Lucene分布式和Google Search API 288

9.1 Lucene与分布式 288

9.1.1 什么是GFS 288

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

9.2 Google的Search API 291

9.2.1 搭建环境 292

9.2.2 构建搜索类 292

9.2.3 设置查询时的参数和查询语法 295

9.2.4 运行测试 296

9.3 小结 297

第四篇 网络爬虫Heritrix 301

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

10.1 Heritrix使用入门 301

10.1.1 下载和运行Heritrix 301

10.1.2 在Eclipse里配置Heritrix的开发环境 304

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

10.1.4 设置抓取时的处理链 310

10.1.5 设置运行时的参数 312

10.1.6 运行抓取任务 314

10.1.7 Heritrix的镜像存储结构 318

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

10.2 Heritrix的架构 320

10.2.1 抓取任务CrawlOrder 320

10.2.2 中央控制器CrawlController 321

10.2.3 Frontier链接制造工厂 324

10.2.4 用Berkeley DB实现的BdbFrontier 329

10.2.5 Heritrix的多线程ToeThread和ToePool 332

10.2.6 处理链和Processor 335

10.3 扩展和定制Heritrix 338

10.3.1 向Heritrix中添加自己的Extractor 339

10.3.2 定制Queue-assignment-policy的两个问题 343

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

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

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

10.4 小结 347

11.1 实例简介以及实现途径 351

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

第五篇 构建垂直搜索引擎 351

11.1.1 选择网站 352

11.1.2 太平洋电脑网和网易手机频道 352

11.1.3 分析网站内容并准备抓取清单 353

11.1.4 从下拉列表获得手机品牌首页 356

11.1.5 解析手机品牌页面 359

11.2 在Heritrix中为pconline开发抓取所需的定制类 361

11.2.1 保存所有产品的页面和图片 362

11.2.2 不保存其他无关页面 362

11.2.3 开始抓取 364

11.3.1 分析网易手机频道 365

11.3 在Heritrix中为网易手机频道开发抓取所需的定制类 365

11.3.2 设计抓取代码 368

11.4 在Eclipse中创建工程结构 373

11.4.1 下载插件 373

11.4.2 在Eclipse中配置插件 374

11.4.3 创建工程 375

11.4.4 设置工程的Context 376

11.4.5 设定源代码存放和输出路径 377

11.4.6 添加Java代码 379

11.4.7 添加Jar包 380

11.4.8 创建JSP文件 381

11.4.9 工程整体结构一览 383

11.5 设定配置文件及其相关类 385

11.5.1 系统属性配置文件 385

11.5.2 封装配置文件 385

11.6 产品详细信息文件格式 387

11.7 解析网页信息的基类Extractor 389

11.8 太平洋电脑网手机产品页面Extractor 393

11.9 pconline产品信息运行效果测试 397

11.9.1 编写测试函数 397

11.9.2 执行测试 398

11.10 网易手机频道的产品信息运行效果 401

11.11 构建产品信息词库 404

11.12 数据库与索引结构 407

11.12.1 定Product类 407

11.12.2 确定数据库与索引的结构 409

11.13 数据库处理和索引处理 411

11.13.1 对数据库进行操作 412

11.13.2 对索引进行操作 414

11.14 调用数据库处理类和索引处理类 415

11.15 运行 420

11.16 小结 422

12.1 HTML的基本知识 423

第12章 使用正则表达式与HTMLParser提取网页内容 423

12.2 JDK中的正则表达式提取网页内容 424

12.2.1 java.util.regex包 424

12.2.2 正则表达式提取网页内容实例 426

12.3 HTMLParser提取网页内容 431

12.3.1 HTMLParser的下载 431

12.3.2 HTMLParser概述 432

12.3.3 Lexer的功能及实现 433

12.3.4 HTMLParser的功能及实现 438

12.3.5 HTMLParser实例 443

12.4 小结 445

第13章 搜索引擎综合实例:DWR 446

13.1 DWR的下载 446

13.2 DWR入门与实例演示 447

13.2.1 创建工程结构 447

13.2.2 在web.xml中配置DWR 447

13.2.3 配置dwr.xml 448

13.2.4 页面代码 449

13.2.5 运行效果 451

13.2.6 DWR与直接使用XMLHttpRequest对象的比较 452

13.2.7 在DWR中操纵自定义的对象 454

13.2.8 查看DWR的输出日志 459

13.3 dwr.xml的配置 460

13.3.1 dwr.xml的标准结构 460

13.3.2 〈init〉标签与DWR自带的converter和creator 461

13.3.3 〈allow〉标签 465

13.3.4 〈signature〉标签 466

13.3.5 另一个例子 467

13.4 util.js 470

13.4.1 调用util.js 471

13.4.2 使用useLoadingMessage方法显示提示图标 471

13.4.3 DWRUtil.setValue和DWRUtil.getValue 475

13.4.4 DWRUtil.getValues和DWRUtil.setValues 478

13.4.5 DWRUtil.addOptions和DWRUtil.removeAllOptions 482

13.4.6 DWRUtil.addRows和DWRUtil.removeAllRows 487

13.4.7 DWRUtil.to DescriptiveString方法 492

13.5 小结 493

第14章 搜索引擎综合实例:Web篇 494

14.1 配置文件 494

14.1.1 Spring配置文件 494

14.1.2 DWR配置文件 495

14.1.3 web.xml 496

14.2.1 SearchResult 498

14.2 各种Bean类 498

14.2.2 SearchResults 500

14.2.3 SearchRequest 502

14.3 SearchService的实现 502

14.4 SearchResultDao 507

14.5 前台部分 509

14.5.1 搜索主页面main.jsp 509

14.5.2 图片的显示 515

14.5.3 详细信息页面detail.sp 516

14.6 问题 519

14.7 小结 521