本书以Lucene构建搜索引擎的开发过程为主线,由浅入深,循序渐进,为读者展示如何使用Lucene开发自己的搜索引擎系统。全书内容包括搜索引擎概述和原理、Lucene部署
安装、Nutch
网络蜘蛛与数据获取、Lucene索引建立、Lucene检索与查询、搜索结果排序、文档
分析器与中文分词、格式化文本分析、分布式搜索与缓存等。为便于读者理解搜索引擎快速开发过程,本书最后几章进行了应用实例的讲解,包括Nutch构建专题搜索、Lucene构建企业级搜索实例以及相关的整体工程性能测试。
本书适合对搜索引擎开发有兴趣的读者阅读,包括搜索引擎开发的初学者、高等院校、
信息专业学生、从事搜索开发的
程序设计人员等。
第1篇 入门篇第1章 搜索引擎概述 31.1 什么是搜索引擎 31.1.1 搜索引擎与信息检索 31.1.2 搜索引擎的概念 41.1.3 搜索引擎的使用 41.1.4 搜索引擎发展历史 51.2 搜索引擎分类 71.2.1 按照工作方式分类 71.2.2 按照领域范围分类 81.2.3 信息类型分类 81.3 主流搜索引擎 91.3.1 全球著名搜索引擎 91.3.2 中文搜索引擎的发展历史 121.3.3 著名中文搜索引擎 121.3.4 其他细化搜索引擎 151.4 搜索引擎评价原则 151.4.1 评价指标体系 151.4.2 其他评测因素 171.5 搜索引擎相关资源 171.5.1 搜索引擎开源项目 181.5.2 搜索引擎研究网站 191.5.3 搜索论坛和厂商黑板报 191.6 系统运行环境准备 201.6.1 Java环境安装设置 201.6.2 Tomcat服务器安装 221.6.3 Eclipse开发环境准备 251.7 未来搜索
技术前瞻 281.7.1 现状存在问题 281.7.2 未来发展趋势 291.8 小结 30第2章 搜索引擎原理探秘 312.1 解密搜索引擎原理 312.1.1 搜索引擎技术框架 312.1.2 网页信息抓取技术 322.1.3 网页内容分析技术 332.1.4 网页索引建立技术 342.1.5 用户检索与结果排序 342.1.6 网页检索工具与接口 352.2 网络爬虫简单实现 352.2.1 网络蜘蛛功能需求 352.2.2 网络蜘蛛实现原理 362.2.3 网络爬虫系统结构 372.2.4 网页采集程序设计 382.2.5 网页采集程序实现 392.2.6 程序实现存储扩展 422.3 网页分析程序实现 442.3.1 网页分析功能需求 442.3.2 网页分析实现原理 452.3.3 网页分析系统结构 452.3.4 网页分析程序设计 462.3.5 文本语素分割与过滤 492.4 网页索引程序实现 522.4.1 网页索引功能需求 532.4.2 网页索引实现原理 532.4.3 网页索引程序设计 542.4.4 网页索引程序实现 552.5 检索程序实现 582.5.1 检索功能需求 582.5.2 检索实现原理 582.5.3 检索程序设计 592.5.4 网页检索程序实现 592.6 简单搜索引擎系统 612.7 小结 62第3章 开源搜索引擎入门 633.1 开源搜索引擎简介 633.1.1 Lucene系统概述 633.1.2 Nutch概述 643.2 Lucene全文检索系统部署 653.2.1 下载Lucene系统 653.2.2 Lucene部署配置 663.2.3 Lucene测试运行 673.3 Lucene开发实例入门 693.3.1 Lucene实例功能 693.3.2 Lucene开发实例 703.3.3 代码实例解析 753.4 Nutch开源搜索引擎部署 773.4.1 Cygwin
软件安装 773.4.2 Nutch下载与安装 793.4.3 Nutch系统环境测试 803.4.4 Nutch搜索页面部署 823.5 Nutch系统
调试与开发 823.5.1 Eclipse中加载Nutch 833.5.2 Nutch工程编译与发布 863.6 小结 87第2篇 内核揭秘篇第4章 搜索引擎数据获取 914.1 网络蜘蛛原理 914.1.1 体系结构设计 914.1.2 访问策略与算法 924.1.3 效率优化与更新 934.1.4 蜘蛛访问
规范 934.1.5 开源蜘蛛简介 934.2 Nutch网络蜘蛛 944.2.1 Nutch网络蜘蛛概述 944.2.2 Nutch抓取模式分类 964.2.3 抓取测试站点建立 974.3 Nutch局域网抓取 974.3.1 本地下载准备 984.3.2 启动下载过程 994.3.3 下载过程解析 1014.3.4 下载多个网站 1034.4 Nutch互联网抓取 1054.4.1 下载列表获取 1064.4.2 下载大量网站 1064.5 Nutch抓取比较 1074.6 Nutch结果检测 1114.6.1 网页内容检索 1124.6.2 使用Readdb获取摘要 1134.6.3 使用SegRead读取分段 1154.6.4 Luke工具使用 1164.7 Nutch配置文件解析 1164.8 Heritrix网络蜘蛛 1184.8.1 Heritrix概述 1184.8.2 Heritrix体系结构 1194.8.3 Heritrix安装与使用 1224.9 小结 125第5章 搜索引擎信息索引 1265.1 文档索引原理 1265.1.1 索引概述 1265.1.2 索引基本结构 1275.1.3 倒排索引原理 1285.1.4 索引分类 1285.1.5 高性能索引 1295.2 Lucene索引器 1295.2.1 Lucene索引介绍 1295.2.2 Lucene索引结构 1305.2.3 多文件索引结构 1335.2.4 复合索引结构 1345.3 Lucene索引实例 1355.3.1 索引创建代码解析 1355.3.2 索引创建器(IndexWriter) 1375.3.3 索引管理器(IndexReader) 1385.3.4 索引修改器(IndexModifier) 1395.3.5 索引分析器(Analyzer) 1405.4 Lucene索引操作 1415.4.1 添加文本文件索引 1415.4.2 创建Lucene增量索引 1435.4.3 使用索引项删除文档 1445.4.4 使用编号删除文档 1455.4.5 压缩文档编号 1475.4.6 索引文档更新 1485.5 Lucene索引高级特性 1515.5.1 选择索引域类型 1515.5.2 索引参数优化 1625.5.3 使用磁盘索引 1655.5.4 使用内存索引 1665.5.5 同步与锁机制 1685.6 Lucene高级应用实例 1695.6.1 创建本地搜索的索引 1695.6.2 索引
数据库记录 1735.6.3 索引优化与合并 1765.7 Nutch中的Lucene索引 1785.8 小结 180第6章 搜索引擎查询处理 1816.1 信息查询原理 1816.1.1 信息查询概述 1816.1.2 查询基本流程 1826.1.3 查询结果显示 1836.1.4 高性能查询 1836.2 Lucene查询概述 1846.2.1 Lucene查询操作
基础 1846.2.2 Lucene查询实例入门 1846.2.3 查询工具IndexSearcher类 1876.2.4 查询封装Query类 1886.2.5 查询分析器QueryParser类 1886.2.6 查询结果集Hits类 1916.3 Lucene基本查询 1926.3.1 Lucene查询Query对象 1926.3.2 最小项查询TermQuery 1956.3.3 区间范围搜索RangeQuery 1986.3.4 逻1/4组合搜索BooleanQuery 2026.3.5 字串前缀搜索PrefixQuery 2056.3.6 短语搜索PhraseQuery 2086.3.7 模糊搜索FuzzyQuery 2116.3.8 通配符搜索WildcardQuery 2146.3.9 位置跨度搜索SpanQuery 2176.4 Lucene高级查询 2246.4.1 索引内存检索 2246.4.2 多关键字跨域检索 2266.4.3 多检索器跨索引检索 2286.5 Nutch中的Lucene查询 2306.6 小结 231第7章 搜索引擎结果排序 2327.1 搜索引擎文档排序原理 2327.1.1 传统检索排序技术 2327.1.2 向量模型排序局限 2337.1.3 搜索引擎相关性排序 2347.1.4 链接分析PageRank原理 2357.1.5 搜索引擎排序流程 2367.2 Lucene检索排序 2367.2.1 Lucene相关性因素 2367.2.2 Lucene相关排序流程 2377.2.3 Lucene排序
计算体系 2377.2.4 Lucene排序
控制方法 2407.3 文档Boost加权排序 2407.3.1 Lucene中Boost介绍 2417.3.2 Boost值全文档排序 2417.3.3 Boost值文档域排序 2447.3.4 BoostingTermQuery排序 2467.4 Sort对象检索排序 2487.4.1 Sort对象概述 2487.4.2 Sort对象相关性排序 2497.4.3 Sort对象文档编号排序 2527.4.4 Sort对象独立域排序 2547.4.5 Sort对象联合域排序 2577.4.6 Sort对象逆向排序 2607.5 Lucene相关性公式 2617.5.1 Lucene评分结果分析 2627.5.2 Lucene排序公式 2647.5.3 其他动态排序因子 2657.6 Lucene自定义排序 2667.6.1 自定义排序比较接口 2667.6.2 自定义排序接口类实例 2677.6.3 自定义排序结果测试实例 2697.6.4 自定义排序测试结果 2727.7 Nutch中的结果排序 2727.7.1 Nutch排序因素 2737.7.2 Nutch链接分析 2737.7.3 Nutch相关度计算 2747.8 小结 275第8章 文档分析器与中文分词 2768.1 文档分析与中文分词原理 2768.1.1 文档分析预处理概述 2768.1.2 文档分析基本流程 2768.1.3 中文分析处理中的分词 2778.2 Lucene分析器内核原理 2788.2.1 Lucene分析器原理 2788.2.2 Analysis包简介 2808.2.3 Analyzer类的组合结构 2828.2.4 JavaCC构造分析器 2828.2.5 StopAnalyzer内核代码分析 2838.2.6 StandardAnalyzer内核代码分析 2848.3 Lucene分析器应用模式 2858.3.1 使用默认分析器建立索引 2858.3.2 使用多种分析器建立索引 2878.3.3 使用分析器检索查询 2888.4 Lucene主要分析器应用实例 2918.4.1 停用词分析器StopAnalyzer 2918.4.2
标准分析器StandardAnalyzer 2948.4.3 简单分析器SimpleAnalyzer 2978.4.4 空格分析器WhitespaceAnalyzer 2988.4.5 关键字分析器KeywordAnalyzer 3008.5 TokenStream分词器内核分析 3018.5.1 Tokenizer分词器 3018.5.2 标准分词器StandardTokenizer 3028.5.3 字符分词器CharTokenizer 3038.5.4 空格分词器WhiteSpaceTokenizer 3048.5.5 字母分词器LetterTokenizer 3048.5.6 小写分词器LowerCaseTokenizer 3058.6 TokenStream过滤器内核分析 3058.6.1 TokenFilter过滤器 3068.6.2 标准过滤器StandardFilter 3068.6.3 停用词过滤器StopFilter 3078.6.4 小写过滤器LowerCaseFilter 3088.6.5 长度过滤器LengthFilter 3098.6.6 词干过滤器PorterStemFilter 3108.7 Lucene中文分词 3108.7.1 中文分词基本原理方法 3118.7.2 StandardAnalyzer分析器中文处理 3128.7.3 CJKAnalyzer中文分析器 3138.7.4 ChineseAnalyzer中文分析器 3158.7.5 IK_CAnalyzer中文分析器 3168.7.6 中科院ICTCLAS中文分词 3188.7.7 JE中文分词 3188.7.8 中文分词问题 3208.8 Nutch分词和预处理 3218.8.1 Nutch分析器 3218.8.2 Nutch中文分词 3248.9 小结 324第9章 搜索引擎文本分析 3259.1 非结构化文本简介 3259.1.1 非结构化文本概述 3259.1.2 非结构化文本检索 3259.2 HTML文档分析 3269.2.1 主流HTML文档分析器 3269.2.2 HTMLParser安装配置 3279.2.3 HTMLParser的框架结构 3289.3 HTMLParser应用实例 3299.3.1 HTMLParser功能模式 3299.3.2 HTMLParser内容解析方式 3299.3.3 Visitor模式正文解析 3309.3.4 Filter模式简单链接提取 3329.3.5 Filter模式搜索链接提取 3349.3.6 Lexer模式遍历文档 3369.4 PDF文档分析 3379.4.1 常用的PDF处理包 3389.4.2 PDFBox安装配置 3389.5 PDFBox应用实例 3399.5.1 PDFBox提取文档内容 3399.5.2 PDFBox文档内容索引 3429.6 Office文档分析 3469.6.1 常用Office文档处理包 3469.6.2 使用POI安装与配置 3469.6.3 POI原理与接口介绍 3489.7 POI分析Office文档实例 3489.7.1 POI处理
Excel文档 3489.7.2 POI处理Word文档 3529.8 XML文档分析 3549.8.1 主流XML文档分析器 3559.8.2 JDOM分析器安装配置 3569.8.3 xerces分析器安装配置 3589.9 XML解析应用实例 3599.9.1 使用JDOM分析XML文档 3599.9.2 使用xerces分析XML文档 3619.10 Nutch文档处理 3649.11 小结 364第10章 分布式搜索与缓存 36510.1 分布式检索与缓存 36510.1.1 分布式搜索引擎现状 36510.1.2 分布式搜索引擎原理 36610.1.3 搜索引擎缓存现状 36710.1.4 搜索引擎缓存原理 36710.2 Nutch与分布式检索 36810.2.1 Google分布式文件系统 36810.2.2 MapReduce系统介绍 36910.2.3 Hadoop分布式文件系统 37010.2.4 Nutch分布式文件系统 37210.2.5 Nutch分布式检索概述 37210.2.6 Nutch分布式检索器 37510.3 Lucene分布式检索 37610.3.1 Socket
通信基础 37610.3.2 Lucene索引服务器 37810.4 Nutch与搜索缓存 38110.5 开源系统缓存系统 38310.6 小结 384第3篇 实战篇第11章 Nutch专题搜索引擎实例 38711.1 专题搜索需求分析 38711.1.1 专题搜索功能需求 38711.1.2 专题搜索用例分析 38811.2 构建Nutch基础搜索引擎 38911.2.1 Nutch搜索功能分析 39011.2.2 信息下载功能测试 39011.2.3 Nutch基础Web检索 39111.2.4 Web用户页面修改 39311.3 专题搜索系统设计 39511.3.1 系统框架设计 39611.3.2 选择开发工具组件 39711.4 专题关键词管理 39711.4.1 专题关键词策略 39811.4.2 关键词存储设计 39811.4.3 关键词管理程序 40011.5 专题资源发现 40311.5.1 专题网页链接发现 40311.5.2 专题资源网站提取 40611.6 专题信息下载 40711.6.1 批量信息下载 40711.6.2 信息自动下载 41011.7 专题信息分析与索引 41211.7.1 网页信息分析 41311.7.2 创建索引 41311.8 检索辅助功能 41411.8.1 相关词推荐 41411.8.2 检索词高亮显示 41611.8.3 检索结果·页 41811.9 小结 424第12章 Lucene实现企业搜索实例 42512.1 企业搜索需求分析 42512.1.1 企业搜索需求概述 42512.1.2 企业搜索用例分析 42612.2 企业级搜索系统设计 42712.2.1 系统框架设计 42712.2.2 Lucene检索框架 42812.3 企业级搜索系统设计 42812.3.1 创建Lucene工程 42912.3.2 全文检索索引生成 42912.3.3 全文检索检索页面 43312.4 数据引擎设计 43812.4.1 数据库数据管理 43812.4.2 非结构化文档 43912.5 企业信息索引 44212.5.1 数据索引建立 44312.5.2 信息检索代码 44712.5.3 检索Web代码 44912.5.4 检索结果测试 45112.6 小结 452