1、搜索引擎开 发实 践第二 讲 全文 检 索与 Lucene简 介主 讲 人: 罗刚概 述l作 业讲 解: Lucene源代 码项 目l倒排索引的原理 lLucene的整体 结 构lLucene基本概念lLucene3.0常用 API的介 绍 与使用lLucene中的 压缩 算法 作 业讲 解: Lucene源代 码项 目l从 SVN下 载 Lucene源代 码TortoiseSVN Exporthttps:/svn.apache.org/repos/asf/lucene/dev/trunk/lucenel把 Lucene源代 码导 入 Eclipse倒排索引的来源人工 编 的名 词 索引第 4
2、页倒排索引的原理第 5页12435排序后的索引 词:文档 :北京武 汉天津上海大 连Lucene中的倒排索引第 6页文档 1: When in Rome, do as the Romans do.文档 2: When do you come back from Rome?停用 词 : in, as, the, from( 4 )( 2, 1 )come( 1 ),( 1 )( 1, 1 ),( 2, 1 )when( 5 ) ( 2, 1 )back( 4 )( 1, 1 )romans( 2 ),( 6 )( 1, 1 ),( 2, 1 )rome( 3 )( 2, 1 )you( 3, 5
3、 ),( 2 )( 1, 2 ),( 2, 1 )dopos( doc, freq )term.tis .frq .prx查询词rome 折半 查 找Lucene中的基本概念l索引 (Index): 文档的集合 组 成索引。和一般的数据 库 不一 样 ,Lucene不支持定 义 主 键 ,但 Solr支持。l为 了方便索引大量的文档, Lucene中的一个索引分成若干个子索引,叫做段 (segment)。段中包含了一些可搜索的文档。 l文档 (Document):代表索引 库 中的一条 记录 。一个文档可以包含多个列 (Field)。和一般的数据 库 不一 样 ,一个文档的一个列可以有多个值
4、。例如一篇文档既可以属于互 联 网 类 ,又可以属于科技 类 。l列 (Field):命名的 词 的集合。l词 (Term) :由两个 值 定 义 词语 和 这 个 词语 所出 现 的列。l倒排索引是基于 词 (Term)的搜索。Lucene的整体 结 构search()addDocument()Lucene索引 库IndexWriterDocument:url:http:/title:猎 兔搜索body:内容介 绍IndexSearcherQuerytitle:NBA ScoreDoc匹配到的文档索引相关 类DocumentAnalyzer IndexWriterField(Title)Fi
5、eld(Body)Field(URL) 一个 Document代表索引 库 中的一条 记录 。一个 Document可以包含多个列。例如一篇文章可以包含 “标题 ”、 “正文 ”、 “修改时间 ”等 field, 创 建 这 些列 对 象以后,可以通 过 Document的add方法增加 这 些列到 Document实 例。 一段有意 义 的文字通 过 Analyzer分割成一个个的 词语 后写入到索引 库 。创 建索引/创 建新的索引 库IndexWriter index = new IndexWriter(indexDirectory,/索引 库 存放的路径new StandardAnalyzer(Version.LUCENE_CURRENT),true,/新建索引 库IndexWriter.MaxFieldLength.UNLIMITED);/不限制列的 长 度File dir = new File(sourceDir);indexDir(dir); /索引 sourceDir路径下的文件index.optimize();/索引 优 化index.close();/关 闭 索引 库