全文检索及lucene原理使用总结_第1页
全文检索及lucene原理使用总结_第2页
全文检索及lucene原理使用总结_第3页
全文检索及lucene原理使用总结_第4页
全文检索及lucene原理使用总结_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

全文检索及Lucence

全文检索是计算机程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置。当用户查询时根据建立的索引查找,类似于通过字典的检索字表查字的过程。全文检索系统是按照全文检索理论建立起来的用于提供全文检索效劳的软件系统。

一、全文检索现状目前常见全文检索技术:1.百度、谷哥等专业搜索引擎系统。2.数据库类型的全文检索。3.java以Lucence为代表的全文检索系统。4.php以Sphinx为代表的全文检索系统。5.以TRS为代表其他语言及商业全文检索系统。

专业搜索引擎专业搜索引擎提供了群众化的全网的内容搜索。优点:使用免费,搜索便捷。缺点:过于群众化,很多专业数据被淹没在信息的海洋之中,不便于与应用系统相结合。数据库类型全文检索

大多数主流数据都提供全文检索功能,如Oracle、Mysql、SqlServer等。

优点:和数据库整合到一块,不需要独立建立系统,方便管理,使用方便。

缺点:扩展不便,索引和查询都不够灵活方便,会影响数据库运行性能。Lucence开源搜索引擎核心确切的讲,Lucence不是完整的搜索引擎,它只是一个开发包。

优点:自定义索引格式,容易部署,方便扩展,提供丰富强大的查询实现,可以对任一可以影响到结果的功能进行定制。

缺点:还未产品化,还存在着一些特定场合的问题。Sphinx一种可以和Mysql配合使用的全文检索系统优点:高速、海量,算法优秀,支持分布式,功能、接口丰富,发行版本支持多平台。缺点:有待学习接触。Lucence简介基于Java的全文信息检索工具包Lucene目前是ApacheJakarta家族中的一个开源工程,下载:///基于Java编写,并有.NET同构产品以及其他语言实现。Lucence突出优点〔1〕索引文件格式独立于应用平台。〔2〕在传统全文检索引擎的倒排索引的根底上,实现了分块索引〔3〕优秀的面向对象的系统架构〔4〕设计了独立于语言和文件格式的文本分析接口〔5〕已经默认实现了一套强大的查询引擎数据分类结构化数据:具有固定格式或者有限长度的数据如数据库、元数据等。非结构化数据:指不固定长度或者不固定格式的数据如邮件、word文档等。非结构化数据的另一种叫法全文数据。

搜索分类结构化数据搜索:用sql对数据库搜索,利用操作系统命令对文件类型的元数据按照文件大小、扩展名、修改时间等属性进行搜索等。对非结构化数据搜索:如操作系统进行文件内容关键词的检索;再如用google百度进行的海量信息检索。非结构化信息的检索

顺序扫描法:

特点:方便、简单、速度慢。先索引再进行搜索法:

特点:需要先进行索引才能进行查找,查找速度快。又称全文检索。

全文检索全文检索大致分为两个局部:索引创立、搜索索引。于是全文检索就存在如下三个问题:1、索引里存着什么?2、如何创立索引?3、如何进行索引搜索?索引链表反向索引结构图通过合并链表查出既包含Lucence又包含Solr的文件索引过程组织文档将原始文档进行分词处理(Tokenizer)得到词元(Token)语言组件处理(变为小写、复数变单数、动词变原型)将得到的词Term传递给索引组件:1.利用所得到的Term创立一个字典2.对字典进行字母排序3.合并相同词Term成为文档倒排(PostingList)链表。倒排文档链表PostingList查询索引过程用户输入查询语句对查询语句进行词法分析语法分析及语言处理词法:单词和关键字语法分析:根据与语法规那么形成语法树语言处理:和索引过程几乎相同搜索索引得到符合语法树的文档得到查询语句的相关性对结果排序LucenceandlearnednotHadoop语法树

处理过的语法树相关性与分值Lucence软件架构①查询②访问③索引存储索引④内存存储⑤文件系统⑥分析⑦语料库用户界面图例

实现协议LucenceAPI介绍org.apache.Lucene.search搜索入口org.apache.Lucene.index索引入口org.apache.Lucene.analysis语言分析器org.apache.Lucene.queryParser查询分析器org.apache.Lucene.document存储结构org.apache.Lucene.store底层IO/存储结构org.apache.Lucene.util一些公用的数据结构Lucene应用实例以搜索文本文档(*.txt)为例假定指定目录没有子目录文档索引代码FileindexDir=newFile(“D:\\luceneIndex〞); //此目录用于存储生成的索引FiledataDir=newFile(“D:\\luceneData〞); //需要建立索引的目录〔假定其没有子目录〕AnalyzerluceneAnalyzer=newCJKAnalyzer();//中日韩词法分析IndexWriterindexWriter=newIndexWriter(indexDir,luceneAnalyzer,true);File[]dataFiles=dataDir.listFiles();for(FilecurrentFile:dataFiles){ if(currentFile.isFile()&¤tFile.getName().endsWith(".txt")){ Documentdocument=newDocument(); ReadertxtReader=newFileReader(currentFile); document.add(Field.Text("path",currentFile.getCanonicalPath())); document.add(Field.Text("contents",txtReader)); indexWriter.addDocument(document); }}indexWriter.optimize();indexWriter.close();文档查询代码StringqueryStr=“whichyouwant";

FileindexDir=newFile("D:\\luceneIndex");if(!indexDir.exists()){ System.out.println("TheLuceneindexisnotexist"); return;

}FSDirectorydirectory=FSDirectory.getDirectory(indexDir,false);IndexSearchersearcher=newIndexSearcher(directory);Termterm=newTerm("contents",queryStr.toLowerCase());TermQueryluceneQuery=newTermQuery(term);Hitshits=searcher.search(luceneQuery);for(inti=0;i<hits.length();i++){ Documentdocument=hits.doc(i); System.out.println("File:"+document.get("path"));}全文检索常见问题文档域的存储设置分词分析器个性化实现文档检索高亮显示查询过程查询分页、排序索引建立过程异常处理局部搜索结果搜索不到索引内容的删除、更新全文检索常见问题中文分词处理文章相关内容计算法分布式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论