欢迎来到天天文库
浏览记录
ID:36054283
大小:335.48 KB
页数:18页
时间:2019-04-28
《lucene技术总结》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、l康康yiminli8927@126.comQQ:353730289lucene技术山东数网信息科技有限公司Lucene技术总结知识库项目组技术亮点总结——1康康2012/2/26此文档讲述了lucent技术的基本用法,包括分词、索引、排重等技术。l康康yiminli8927@126.comQQ:353730289lucene技术一、摘要本文档是在完成山东农信知识库项目的基础上编写的,简要介绍了lucene技术的原理、分词技术、索引技术、文档权重、文档排重技术等,本文档的定位是lucene初级开发人员,如果您已经是lucene专家或
2、者是搜索引擎的大牛,就没必要来看本文档了。本文档的所有编码是基于lucene3.0.4完成的,使用的是标准分析器,对于不同的lucene版本或者不同的分析器,代码会有一定的差异。二、Lucene全文检索的实现Lucene是一个高效的全文检索库。相信各位同事在项目中通过数据库检索的案例很多,数据库检索大家一定非常熟悉了,我们知道在正常情况下数据库查询搜索能够满足我们的需求,那为什么还要用到lucene全文检索呢?在学习lucene之前,我们先了解一下全文检索吧。数据分为两种:结构化数据和全文数据(又叫做非结构化数据)。•结构化数据:指
3、具有固定格式或有限长度的数据,如数据库,元数据等。•全文数据:指不定长或无固定格式的数据,如邮件,word文档等。对结构化数据的搜索,我们一般用到数据库比较多。那对于全文数据的搜索呢?我们需要针对全文数据制定全文搜索的方式,其中像lucene这样,先建立索引,再对索引进行搜索就是其中的一种。Lucene是一个基于java的全文索引引擎工具包,它提供了各种借口,可以方便的嵌入到各种应用中,通过对接口的实现满足我们全文索引或者检索功能。在对非结构化数据索引之前,我们需要先将数据进行分词处理,对于英文分词比较简单,一个空格间隔就是一个单词
4、,而对于中文,我们如何将中文的词提取出来再进行索引难度就比较大了。Lucene提供了多种语言分析器,在本文档的第四节中,我们将会对lucene分词技术做详细的讲解。在对文字进行关键字提取之后,下一步就需要对内容进行索引了。索引是通过document存储的,document可以设定多个field字段,根据需要按照规则索引或者存储字段。索引同数据库的索引一样是有序的,因此lucene可以很高效的搜索信息。索引文件记录了词和词在文件中的偏移量。搜索的时候,语言分析器,查询分析器,甚至搜索器(Searcher)都是提供了抽象的接口,可以根据
5、需要进行定制。搜索结果返回的是Hits对象,可以通过它提取到查询返回的索引(也是通过document对象返回的),我们可以根据需要通过java代码将它转换为所需的对象。三、简单的案例这一章节给出一个简单的案例,希望大家通过这个案例对lucene有个初步的认识。案例的源代码并不是知识库的搜索源代码,而是我从网上找的部分代码。1.如下是创建索引的实现:l康康yiminli8927@126.comQQ:353730289lucene技术publicstaticvoidcreateTxtFileIndex(){//设置索引地址Fileind
6、exDir=newFile("D:\luceneIndex");//设置数据地址FiledataDir=newFile("D:\luceneData");//建立分词AnalyzerluceneAnalyzer=newStandardAnalyzer();//取得目录下所有FilesFile[]dataFiles=dataDir.listFiles();//建立indexWriteindexWrite主要作用是添加索引IndexWriterindexWriter=newIndexWriter(indexDir,luceneAna
7、lyzer,true);//循环文件for(inti=0;i8、FileReader(dataFiles[i]);//Document添加pathdocument.add(newField("path",dataFiles[i].getCanonicalPath(),Field.Store.YES
8、FileReader(dataFiles[i]);//Document添加pathdocument.add(newField("path",dataFiles[i].getCanonicalPath(),Field.Store.YES
此文档下载收益归作者所有