文档详情

站内全文检索实现机制-read.ppt

发布:2018-04-13约3.28千字共11页下载文档
文本预览下载声明
基于lucene的全文检索 2007.10.12 Lucene简介 Lucene不是一个完整的全文索引应用,而是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。 Lucene的作者:Lucene的贡献者Doug Cutting是一位资深全文索引/检索专家,曾经是V-Twin搜索引擎(Apple的Copland操作系统的成就之一)的主要开发者,后在Excite担任高级系统架构设计师,目前从事于一些INTERNET底层架构的研究。他贡献出的Lucene的目标是为各种中小型应用程序加入全文检索功能。 已经有很多Java项目都使用了Lucene作为其后台的全文索引引擎,比较著名的有: Jive:WEB论坛系统; Eyebrows:邮件列表HTML归档/浏览/查询系统,本文的主要参考文档“TheLucene search engine: Powerful, flexible, and free”作者就是EyeBrows系统的主要开发者之一,而EyeBrows已经成为目前APACHE项目的主要邮件列表归档系统。 Cocoon:基于XML的web发布框架,全文检索部分使用了Lucene Eclipse:基于Java的开放开发平台,帮助部分的全文索引使用了Lucene 站内全文检索实现机制 工作原理:如下图 比较一下Lucene和数据库的模糊查询: 结论: 全文检索和数据库应用的最大不同在于:让最相关的头100 条记 录满足98%以上用户的需求! Lucene的使用 Lucene的组成结构: 对于外部应用来说索引模块(index)和检索模块(search)是主要的外部应用入口,如下图: Lucene的使用方法: 建索引: //得到存放索引文件的目录 Directory fsDirectory = FSDirectory.getDirectory(indexDirectory, true); // 创建分析器,主要用于从文本中抽取那些需要建立索引的内容 Analyzer analyzer = new StandardAnalyzer(); // 用指定的语言分析器,索引文件目录,构造一个新的写索引器,参数true用于确定是否覆盖原有索引的 IndexWriter indexWriter = new IndexWriter(fsDirectory,analyzer, true); // 为article表的主健创建索引,关于Field的几个参数下面有详细解释 document.add(new Field(content, content,Field.Store.YES, Field.Index.TOKENIZED)); //开始创建索引文件 indexWriter.addDocument(document); // Optimize的过程就是要减少剩下的Segment的数量,尽量让它们处于一个文件中. indexWriter.optimize(); indexWriter.close(); Field就像我们学过的数据库中的字段,简单的说,就是一个名值对。这个域有三种属性,分别是 isStored - 是否被存储 isIndexed - 是否被索引 isTokenized - 是否分词 这些属性的组合又构成了四种不同类型的Field,而且各有用途 Field(String name, String value, Field.Store.YES, Field.Index.UN_TOKENIZED) 存储、不索引、不分词,比如文件的全路径 Field(String name, String value,Field.Store.YES, Field.Index.NO) // version 2.0.0 不存储、索引、分词,比如HTML的正文、Word的内容等等,这部分内容是要被索引的,但是由于具体内容通常很大,没有必要再进行存储,可以到时候根据URI再来挖取。所以,这部分只分词、索引,而不存储。 Field(String name, String value,Field.Store.YES, Field.Index.TOKENIZED)// version 2.0.0 存储、索引、分词,比如文件的各种属性,比如MP3文件的歌手、专辑等等。 Field(String name, Reader reader) ?// version 2.0.0 不存储、索引、分词。 搜
显示全部
相似文档