Lucene2.4_正在整理中.doc

上传人:11****ws 文档编号:2992435 上传时间:2019-05-16 格式:DOC 页数:19 大小:315KB
下载 相关 举报
Lucene2.4_正在整理中.doc_第1页
第1页 / 共19页
Lucene2.4_正在整理中.doc_第2页
第2页 / 共19页
Lucene2.4_正在整理中.doc_第3页
第3页 / 共19页
Lucene2.4_正在整理中.doc_第4页
第4页 / 共19页
Lucene2.4_正在整理中.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、Comment t1: 全文检索和数据库的对比:他们所解决的问题不一样,解决的方案也不一样,所以不应进行对比。0.作用(目标):学完后能做什么把最想要的资源快速的检索出来。全文检索不同于数据库搜索:1,匹配效果:如搜索 ant会搜索出 planting。2,查出的结果没有相关度排序,不知道有用的结果在哪一页。3,搜索速度达不到毫秒级的要求。相关度排序说明:搜索结果列表中越靠前的,一般就是最符合我们所预期的结果。回想使用 baidu的时候,一般在第 1页中就可以找到想要的文章,越往后翻就越离题。这是因为结果列表是按照相关度排过序的。全文检索的实例有常见的搜索引擎 baidu与 google等。如

2、下图就是使用 baidu搜索的效果:我们主要是做系统内搜索(或叫做站内搜索) ,即对一个系统内的资源进行搜索。如BBS、Blog 中的文章搜索,网上商店中的商品搜索等。实例有 ItcastBBS、Eclipse 等。一般不做互联网中资源的搜索,因为不易获取与管理海量资源。 (专业搜索方向的公司除外) 。学完后,可以为自已的系统增加全文检索的能力。练习:1,看明白 ItcastTieba的实现。2,为他增加文章全文检索的功能。Comment t2: 要查询的一段文本Comment t3: 文体数据Comment t4: 提取出文本中的词Comment t5: 方式1.基础概念说明全文检索 ORM

3、Lucene Hibernate要选明白概念,再学习相应实现(框架) 。1.1.全文检索的定义信息检索:从信息集合中找出与用户需求相关的信息。信息类型有:1,文本(或可以转为文本) ,如 txt, html, pdf, word等。2,多媒体,如音频、视频、图片等。全文检索:是指把用户的查询请求和全文中的每一个词进行比较,不考虑查询请求与文本语义上的匹配。全文检索特点:1,只关注文本。2,不考虑语义。 (如搜索“中国的首都是哪里” ,如下图所示)在信息检索工具中,全文检索是最具通用性和实用性的。1.2.全文检索的工作流程(并引出索引库)如果信息检索系统在用户发出了检索请求后再去互联网上找答案,

4、根本无法在有限的时间返回结果。他是先索引,再搜索的。1, 索引流程。2, 搜索流程。搜索的目的是为了在大量的信息中发现自己感兴趣的信息。但是,当有了足够的资料(比如网页、Word 文档、Pdf 文档,或数据库中的资料等)之后,并不能立即开始搜索,在此之前,必须先对信息建立索引。就好比在图书馆里存放着大量书籍,当我们想查找关于某个主题的书籍时,不能一本一本的翻阅,而是要先查阅书籍的索引卡,根据索引卡上的信息找到相应的书籍。所以,当一本书进入到图书馆后,最重要的工作就是要马上建立索引卡。同样,对于我们所拥用的信息,也需要为其建立索引。建立索引,就是对待搜索的信息进行一定的分析,并将分析结果按照一定

5、的组织方式存储起来,通常将这些结果存储在文件中。存储分析结果的文件的集合就是索引。在查询时,先从索引中查找,由于索引是按照一定的结构组织的,所以查询的速度非常快。索引库.html.txt.doc.pdf加工/分析建立索引采集分析建立索引的过程用户搜索的过程输入要搜索文本说明:在 Internet 上采集信息的软件被称为爬虫或蜘蛛,或称做网络机器人。爬虫在 Internet上访问每一个网页,每访问一个网页就把其中的内容传回本地服务器。信息加工最主要的任务就是为采集到本地的信息编排索引,为查询做好准备。就好比在传统的图书编目工作中,图书管理员需要对书籍进行分类、标引、并撰写摘要。信息加工的过程的过

6、程和图书编目过程类似,但全部由计算机自动完成。1.3.实现快速检索的原理(索引库结构)1.3.1. 索引文件结构是倒排索引,索引对象是文档中的单词等,用来存储这些单词在一个文档中的位置。例如,有些书在最后提供的索引(单词页码 的对应列表) ,就可以看成是一种倒排序索引。可以通过一些关键字,在全书中检索出与之相关的部分。词汇表关键词 所在的文档编号采集 1,3信息 1,5软件 1,2,5 以上只是用于说明倒排序索引的结构,最终的索引结构要复杂的多,还要存储关键词在文本中的编号位置(或是首字母的字符位置)等信息。1.3.2. 索引文件的检索与维护词汇表规模相对较小,文档集合规模较大。进行检索时,先

7、从检索词汇表开始,然后找到相对应的文档。如果查询中仅包含一个关键词,则在词汇表中找到该单词,并取出他对应的文档就可以了。如果查询中包含多个关键词,则需要将各个单词检索出的记录进行合并。维护倒排索引有三个操作:插入、删除和更新文档。但是更新操作需要较高的代价。因为文档修改后(即使是很小的修改) ,就可能会造成文档中的很多的关键词的位置都发生了变化,这就需要频繁的读取和修改记录,这种代价是相当高的。因此,一般不进行(真正的)更新操作,而是使用“先删除,后创建”的方式代替更新操作。2. HelloWorld发 Lucene 的资料, jar 包等。文档集合文档 1文档 2文档 3文档 4文档 5Co

8、mment t6: http:/wiki.apache.org/jakarta-lucene/PoweredBy2.1.Lucene介绍Lucene的主页为: http:/lucene.apache.org/。有很多应用程序使用 Lucene来提供全文检索的功能,如我们经常使用的 Eclipse的帮助子系统,就是使用 Lucene实现的。 (在第一次使用的时候,会有一个进度条,那是在创建索引) 。2.2.Lucene使用的 HelloWorldHelloWorld程序有两个操作:创建索引与进行搜索。2.2.1.添加 Lucene环境 添加 jar包 lucene-core-2.4.0.jar(

9、核心) ; contrib/analyzers/lucene-analyzers-2.4.0.jar(分词器) ; contrib/highlighter/lucene-highlighter-2.4.0.jar(高亮器) ;2.2.2.建立索引/* 创建索引*/Testpublic void createIndex() throws Exception / file docDocument doc = File2DocumentUtils.file2Document(filePath);/ 建立索引IndexWriter indexWriter = new IndexWriter(index

10、Path, analyzer, true, MaxFieldLength.LIMITED);indexWriter.addDocument(doc);indexWriter.close();2.2.3. 进行搜索练习:使用 Lucene 进行索引与搜索,完成建立索引与搜索的两个方法。1.1.小结/* 搜索 */Testpublic void search() throws Exception String queryString = “document“;/ 1,把要搜索的文本解析为 QueryString fields = “name“, “content“ ;QueryParser que

11、ryParser = new MultiFieldQueryParser(fields, analyzer);Query query = queryParser.parse(queryString);/ 2,进行查询IndexSearcher indexSearcher = new IndexSearcher(indexPath);Filter filter = null;TopDocs topDocs = indexSearcher.search(query, filter, 10000);System.out.println(“总共有【“ +topDocs.totalHits+“】条匹配结

12、果“);/ 3,打印结果for(ScoreDoc scoreDoc : topDocs.scoreDocs)int docSn = scoreDoc.doc; / 文档内部编号Document doc = indexSearcher.doc(docSn); / 根据编号取出相应的文档File2DocumentUtils.printDocumentInfo(doc); / 打印出文档信息3. 基础的和重要的类与方法IndexWriter:操作索引库,增删改/ 构造方法:如果索引库不存在,会自动创建。如果存在,就使用他new IndexWriter(String/Directory indexPa

13、th, Analyzer a, MaxFieldLength mfl)/ 构造方法:第三个参数指定是否创建一个新的索引库。/ 1,有索引库,create 为 true:会重新创建。2,没有索引库,create 为 false,会报错。new IndexWriter(String/Directory indexPath, Analyzer a, boolean create, MaxFieldLength mfl)/ 添加索引addDocument( Document doc )/ 更新updateDocument(Term term, Document doc)/ 删除deleteDocume

14、nt(Term term)/ 合并索引库addIndexesNoOptimize(Directory)/ 优化索引库optimize()IndexSearcher:操作索引库,查询/ 构造方法,索引库不存在,就报错new IndexSearcher( String indexPath )/ 搜索TopDocs search( Query query, Filter filer, int n )/ 搜索TopDocs search( Query query, Filter filer, int n , Sort sort)/Document doc( int docSn )Document:Lu

15、cene 所操作的对象Field:组成 Document 的元素,代表一个属性。 Store、Indexnew Field( String name, String value, Store store, Index index )Directory:索引库(目录)FSDirectory :真实的目录RAMDirectory:在内存中的一个虚拟的目录QueryParser:把查询字符串变为查询对象的工具。使用子类: MultiFieldQueryParsernew MultiFieldQueryParser(String fields, Analyzer a)Term:代表某个属性中的一个关键

16、词(目录中出现的条目) ,是搜索的最小单位Query :查询对象(封装的过滤条件) 。有很多子类,对应各种各样的查询方式。TopDocs(一套) :代表查询结果FilterSort3.1.DocumentLucene 所能操作的一个文档。3.2.Field组成 Document 的元素。构造 Field 时,有 Store 与 Index 参数。Store.NO 取不到Index.NO 查不到说明:分词后索引:先把内容(文本)分词,得到很多词。再分别对这些词建立目录。不分词索引:“Lucene 入门经典 ”,在搜索时,搜“Lucene” ,搜不到。3.3.Term查询的最小单位。代表一个属性中

17、的一个关键词。某个字段中的某个关键词3.4.IndexWriter操作(增删改)索引库的类。3.5.IndexSearcher在索引库中搜索的类。3.6.Directory代表存放索引库的目录(位置) 。有两个子类:1,文件系统目录(FSDirectory) 。2,在内存中的一个模拟的目录(RAMDirectory)3.6.1. FSDirectory3.6.2. RAMDirectory 3.7.日期时间与数字类型的使用在对属性值进行大小比较时(通常是使用范围查询,比较数字类型的时候) ,是按照字符串的比较规则,因为他们都是转成字符串后存储的。这样就会出现问题,如 “20”是大于“100”的

18、(根据字符串的比较规则) 。解决的方法是:让数字转成的字符串具有相同的位数,如位数不足,就在前面补相应数量个“0” 。数字到符串、字符串到数字的转换可以使用 Lucene 提供的工具类 NumberTools 完成。对于日期与字符串的双向转换,则可以使用Lucene 提供的 DateTools 完成。3.7.1. DateTools转换日期的工具类,第二个 Resolution 参数可以指定日期的精度。指定 Resolution 中的常量值。3.7.2. NumberTools转换数字的工具类,把数字转为 36 进制(10 个数字加上 26 个字母)的字符串。4. IndexDao4.1.IndexDao 的使用说明(作用)完成对索引的增删改查。4.2.创建索引的方案4.2.1. 定时重新创建索引可以在不修改原有程序的情况下增加全文检索的功能。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。