您好,欢迎访问三七文档
当前位置:首页 > 高等教育 > 语言学 > lucene笔记-视频配套笔记
传智播客Java学院传智.入云龙全文检索技术之Lucene1课程计划1、什么全文检索数据类型:结构化数据和非结构化数据非结构化数据查询方法全文检索的概念2、什么是Lucene3、Lucene实现全文检索的流程(重点)4、Lucene的入门程序(重点)5、分析器Analyzer(重点)7、索引库的维护(重点)i.索引库的增加索引ii.删除索引iii.修改索引8、索引库的查询(重点)i.使用Query的子类查询ii.使用QueryParser查询8、相关的排序2什么全文检索结构化数据:数据的长度类型是固定的。数据库中的数据非结构化数据:长度不固定格式不固定。Word文档、excel、pdf、txt。2.1结构化数据的查询使用sql语句查询就可以2.2非结构化数据的查询需求:在文件中找出包含java字符的文档。传智播客Java学院传智.入云龙2.2.1实现方法1、目测2、顺序扫描。如果文件量大的话比如说20G,顺序扫描会变的很慢。3、非结构化的数据变结构化先从文件中找出文件所有的词汇,形成一个列表。查询的时候直接查询列表,找到关键词后根据这词找到相应的文档。一次创建多次使用。2.3全文检索的概念这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-textSearch)。2.4全文检索应用领域1、搜索引擎,百度、谷歌2、站内搜索a)微博搜索b)论坛搜索3、电商搜索,搜索的是商品信息。3什么是Lucene3.1Lucene的概念Lucene是apache下的一个开放源代码的全文检索引擎工具包。提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能。3.2Lucene和搜索引擎的区别Lucene是一个工具包:需要进行编程才能实现全文检索的功能呢搜索引擎:一套独立运行的系统,提供了全文检索功能。传智播客Java学院传智.入云龙3.3Lucene的下载下载地址:本课程Lucene的版本:4.10.3包名功能org.apache.lucene.analysis语言分析器,主要用于的切词Lucene提供的分析器实现类在:lucene-analyzers-common-4.10.3.jarorg.apache.lucene.document索引存储时的文档结构管理,类似于关系型数据库的表结构传智播客Java学院传智.入云龙org.apache.lucene.index索引管理,包括索引建立、删除等org.apache.lucene.queryParser查询分析器,实现查询关键词间的运算,如与、或、非等,生成查询表达式,org.apache.lucene.search检索管理,根据查询条件,检索得到结果org.apache.lucene.store数据存储管理,包括一些I/O操作org.apache.lucene.util公用类4Lucene实现全文检索的流程4.1案例:我们以一个案例来研究全文检索系统架构:实现一个文件的搜索功能,通过关键字搜索文件,凡是文件名或文件内容包括关键字的文件都需要找出来。4.2实现的流程传智播客Java学院传智.入云龙4.2.1创建索引4.2.1.1获得文档使用文件流读取文档的内容就可以获得文档。搜索引擎:使用网络爬虫来获得。Nutch:apache的爬虫程序Heritrix:爬虫程序Jsoup:html分析的工具包电商网站:数据库中的表,例如商品表。数据库中的每一条记录都是一个原始文档。Solr:直接从数据库中的表导入到索引库中。4.2.1.2创建文档对象每个文件对应一个文档对象Document对象。Field域。每个文档对象Document对象中可以有多个域,每个域可以存储文件的相关属性。传智播客Java学院传智.入云龙例如:文件名文档内容文件路径文件的大小不同的文档中域可以不同,同一个文档中可以有相同的域。4.2.1.3分析文档主要是分析文档的内容,文件的标题。目的:分析出文档中包含的关键词。1、先根据空格进行字符串的拆分得到词汇列表2、词汇列表中无意义的词叫做“停用词”。去除停用词。例如:a、the、an3、去掉标点符号。4、统一大小写,转换成小写。最终得到语汇单元流。注意:并不是所有域都需要分析,只需要分析指定的域就可以。4.2.1.4创建索引将索引和document对象写入索引库。持久化的过程。创建索引是对语汇单元索引,通过词语找文档,这种索引的结构叫倒排索引结构。Document文件名文件内容文件的路径文件的大小其他属性。。。传智播客Java学院传智.入云龙持久就是把索引和document写索引库,索引库包含量部分内容。索引、和document4.2.2查询索引4.2.2.1用户查询接口用户输入查询条件的地方本例中可以硬编码到代码中。4.2.2.2创建查询可以使用Query创建查询条件。需要指定要查询的域和要查询的内容:索引库索引LuceneSolrHadoopjavaDocument1Document2Document3传智播客Java学院传智.入云龙查询语法:域名:关键词例如:title:java查询多个关键字:Title:javaANDtitle:lucene4.2.2.3执行查询到索引库中找到指定域,查询指定关键字。返回一个查询结果。返回文档列表。4.2.2.4渲染结果对关键词进行高亮显示、分页、结果的排序。传智播客Java学院传智.入云龙5Lucene的入门程序5.1创建索引索引存放的位置可以是内存可以是文件系统。根据实际的使用场景来决定。第一步:指定索引库存放的位置。Directory对象。第二步:需要使用到IndexWriter对象来创建索引。第三步:指定创建索引时使用的分析器Analyzer对象。第四步:获得原始文档。使用文件流读取文件内容。第五步:创建文档对象。Document对象,创建文档对象的多个域,文件名、文件内容、文件的路径、文件的大小。第六步:将文档对象使用indexwriter对象写入索引库。开发环境:jdk1.7Eclipse3.7indigo编码:1、创建一个java工程2、导入jar包。lucene-core-4.10.3.jarlucene-analyzers-common-4.10.3.jarcommons-io-2.4.jar传智播客Java学院传智.入云龙5.1.1Field域域有三个属性是否分析、是否索引、是否存储。1、是否分析(tokenized)是:将Field值分析出语汇单元即作分词处理,将词进行索引比如:商品名称、商品简介等,这些内容用户要输入关键字搜索,由于搜索的内容格式大、内容多需要分析后将语汇单元索引。否:不作分词处理比如:商品id、订单号、身份证号等2、是否索引(indexed)是:将Field分析后的词或整个Field值进行索引,只有索引方可搜索到。比如:商品名称、商品简介分析后进行索引,订单号、身份证号不用分析但也要索引,这些将来都要作为查询条件。否:不索引无法搜索到比如:商品id、文件路径、图片路径等,不用作为查询条件的不用索引。3、是否存储(stored)是:将Field值存储在文档中,存储在文档中的Field才可以从Document中获取比如:商品名称、订单号,凡是将来要从Document中获取的Field都要存储。否:不存储Field值,不存储的Field无法通过Document获取比如:商品简介,内容较大不用存储。如果要向用户展示商品简介可以从系统的关系数据库中获取商品简介。5.1.2常用的域Field类数据类型Analyzed是否分析Indexed是否索引Stored是否存储说明StringField(FieldName,FieldValue,Store.YES))字符串NYY或N这个Field用来构建一个字符串Field,但是不会进行分析,会将整个串存储在索引中,比如(订单号,姓名等)是否存储在文档中用Store.YES或Store.NO决定LongField(FieldName,FieldValue,Store.YES)Long型YYY或N这个Field用来构建一个Long数字型Field,进行分析和索引,比传智播客Java学院传智.入云龙如(价格)是否存储在文档中用Store.YES或Store.NO决定StoredField(FieldName,FieldValue)重载方法,支持多种类型NNY这个Field用来构建不同类型Field不分析,不索引,但要Field存储在文档中TextField(FieldName,FieldValue,Store.NO)或TextField(FieldName,reader)字符串或流YYY或N如果是一个Reader,lucene猜测内容比较多,会采用Unstored的策略.5.1.3程序开发@TestpublicvoidcreateIndex()throwsException{//指定索引库存放的位置StringindexPath=D:\\temp\\yun14\\index;//将索引库存放到内存中//Directorydirectory=newRAMDirectory();//存放到文件系统中Directorydirectory=FSDirectory.open(newFile(indexPath));//创建分析器对象Analyzeranalyzer=newStandardAnalyzer();//创键IndexWriterconfig对象//第一个参数:Lucene使用的版本//第二个参数:分析器对象IndexWriterConfigconfig=newIndexWriterConfig(Version.LATEST,analyzer);//创建Indexwriter对象IndexWriterindexWriter=newIndexWriter(directory,config);//遍历原始文档文件夹下的所有文件将文件内容读取到程序中Filepath=newFile(D:\\传智播客\\01.课程\\04.lucene\\01.参考资料\\searchsource);for(Filefile:path.listFiles()){//创建Document对象Documentdocument=newDocument();//获得文件名StringfileName=file.getName();//获得文件内容StringfileContent=FileUtils.readFileToString(file);//文件路径传智播客Java学院传智.入云龙StringfilePath=file.getPath();//文件的大小longfileSize=FileUtils.sizeOf(file);//向文档中添加域//第一个参数:域名//第二个参数:域的值//第三个参数:是否存储Store.YES存储Store.NO不存储FieldfileNameField=newTextField(filename,fileName,Store.YES);FieldfileContentField=newTextField(content,fileContent,Store.YES);FieldfilePathField=newStoredField(path,filePath);FieldfileSizeField=newLongField(size,fileSize,Store.YES);//添加到文档对象中document.add(fileNameField);document.add(fileContentField);document.add(filePathField);document.add(fileSizeField);//将document写入索引库indexWriter.addDocument(docum
本文标题:lucene笔记-视频配套笔记
链接地址:https://www.777doc.com/doc-2886282 .html