1 / 18
文档名称:

Lucene技术总结.docx

格式:docx   大小:305KB   页数:18页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Lucene技术总结.docx

上传人:miaoshen1985 2019/3/3 文件大小:305 KB

下载得到文件列表

Lucene技术总结.docx

相关文档

文档介绍

文档介绍:山东数网信息科技有限公司Lucene技术总结知识库项目组技术亮点总结——1康康2012/2/26此文档讲述了lucent技术的基本用法,包括分词、索引、排重等技术。摘要本文档是在完成山东农信知识库项目的基础上编写的,简要介绍了lucene技术的原理、分词技术、索引技术、文档权重、文档排重技术等,本文档的定位是lucene初级开发人员,如果您已经是lucene专家或者是搜索引擎的大牛,就没必要来看本文档了。,使用的是标准分析器,对于不同的lucene版本或者不同的分析器,代码会有一定的差异。Lucene全文检索的实现Lucene是一个高效的全文检索库。相信各位同事在项目中通过数据库检索的案例很多,数据库检索大家一定非常熟悉了,我们知道在正常情况下数据库查询搜索能够满足我们的需求,那为什么还要用到lucene全文检索呢?在学****lucene之前,我们先了解一下全文检索吧。数据分为两种:结构化数据和全文数据(又叫做非结构化数据)。•结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。•全文数据:指不定长或无固定格式的数据,如邮件,word文档等。对结构化数据的搜索,我们一般用到数据库比较多。那对于全文数据的搜索呢?我们需要针对全文数据制定全文搜索的方式,其中像lucene这样,先建立索引,再对索引进行搜索就是其中的一种。Lucene是一个基于java的全文索引引擎工具包,它提供了各种借口,可以方便的嵌入到各种应用中,通过对接口的实现满足我们全文索引或者检索功能。在对非结构化数据索引之前,我们需要先将数据进行分词处理,对于英文分词比较简单,一个空格间隔就是一个单词,而对于中文,我们如何将中文的词提取出来再进行索引难度就比较大了。Lucene提供了多种语言分析器,在本文档的第四节中,我们将会对lucene分词技术做详细的讲解。在对文字进行关键字提取之后,下一步就需要对内容进行索引了。索引是通过document存储的,document可以设定多个field字段,根据需要按照规则索引或者存储字段。索引同数据库的索引一样是有序的,因此lucene可以很高效的搜索信息。索引文件记录了词和词在文件中的偏移量。搜索的时候,语言分析器,查询分析器,甚至搜索器(Searcher)都是提供了抽象的接口,可以根据需要进行定制。搜索结果返回的是Hits对象,可以通过它提取到查询返回的索引(也是通过document对象返回的),我们可以根据需要通过java代码将它转换为所需的对象。简单的案例这一章节给出一个简单的案例,希望大家通过这个案例对lucene有个初步的认识。案例的源代码并不是知识库的搜索源代码,而是我从网上找的部分代码。如下是创建索引的实现:publicstaticvoidcreateTxtFileIndex(){ //设置索引地址 FileindexDir=newFile("D:\\luceneIndex"); //设置数据地址 FiledataDir=newFile("D:\\luceneData"); //建立分词 AnalyzerluceneAnalyzer=newStandardAnalyzer(); //取得目录下所有Files File[]dataFiles=(); //建立indexWriteindexWrite主要作用是添加索引 IndexWriterindexWriter=newIndexWriter(indexDir,luceneAnalyzer,true); //循环文件 for(inti=0;i<;i++){ //取出txt后缀的文档 if(dataFiles[i].isFile()&&dataFiles[i].getName().endsWith(".txt")){ ("Indexingfile"+dataFiles[i].getCanonicalPath()); //新建一个Document Documentdocument=newDocument(); //读取数据 ReadertxtReader=newFileReader(dataFiles[i]); //Document添加path (newField("path",dataFiles[i].getCanonicalPath(),,)); //Document添加正文 (newField("contents",txtReader)); //添加索引