首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Lucene In Action 学习札记(一)

2013-03-13 
Lucene In Action 学习笔记(一)1.1 怎样应对信息爆炸时代信息检索技术1.2 Lucene是什么1.2.1 Lucene是什么

Lucene In Action 学习笔记(一)
1.1 怎样应对信息爆炸时代  信息检索技术  
1.2 Lucene是什么1.2.1 Lucene是什么  Lucene是一款高性能的,可扩展的信息检索工具库。信息检索是指文档搜索,文档内信息搜索,文档相关
元数据操作。
  信息检索(Information retrieval)
  使用lucene后,你会发现它为你提供了一套#简单而强大的核心API#。
1.2.2 Lucene 能做些什么  Lucene只是一个软件类库,或者一个工具箱。而并是不一个完整的搜索程序。Lucene专注于#文本索引#和#搜索#功能,并且运行效果非常不错。
1.3 Lucene中的组件 1.3.1 索引组件 (1)获取内容:lucene 作为一款核心搜索库,并不提供任何功能来实现内容获取
开源爬虫工具:Nutch,Solr,Grub 
 (2)建立文档: 将下载抓取的内容转换成文档的形式。
 (3)文档分析:将文本分割成一系列被称为语汇单元的独立的原子元素。
 (4)文档索引:文档被加入到索引列表。 
1.3.2 搜索组件   搜索处理的过程就是从索引中查找单词,从而找到包含该单词的文档。搜索质量主要由查准率(precision)和
查全率(recall)来衡量。benchmark模块用来检验。
  (1)用户搜索界面:简单,美观,结果展现列表。
  (2)建立查询条件(build query):lucene 提供了一个叫查询解析器(queryParser)的强大的并发包,可以根据通用的查询语法把用户
输入的文本处理成查询对象。封装查询对象的时候:可以根据自己的语法做一些特殊的处理。比如电子商务网站:会对利率高的商品进行加权。  
  (3)搜索查询(search query)
  查询检索索引并返回与查询语句匹配的文档,返回的结果按查询请求进行排序。
  (4)展现结果
  用直观,易用的方式为用户展现结果。  
1.3.3 其他组件  管理界面,分析界面,搜索范围。  
1.3.4 lucene 与其他程序整合  在自己的项目中加入Lucene  
1.4 Lucene实战:程序示例  1.4.1 Index  Demo1  1.4.2 Search Demo21.5 Lucene 索引和搜索核心类介绍  IndexWriter,Directory,Analyzer,Document,Field  
1.5.1 IndexWriter  IndexWriter(写索引)是索引的核心组件,这个类负责#创建索引或者修改,删除已有索引#。(提供索引的写入操作,
不提供读取和搜索操作)  
1.5.2 Directory  根据索引的存储路径,#读取索引文件#,最后传递给Indexwriter类(通过构造方法)。
1.5.3 Analyzer     文本文件在被索引之前,需要先经过Analyzer(分析器)处理。Analyzer由IndexWriter在构造中指定,负责从文本文件中提取
词汇单元。(如果内容不是纯文本文件,那就需要先将其转换成)文本文档。
1.5.4 Document   Document(文档)对象代表一些域(Field)的集合。可以将Document对象理解为虚拟文档--比如web页面或者文本文件--然后你可以从中取回大量的数据。
  (Document 对象的结构比较简单,为一个包含多个Field对象的容器;
Field是指包含能被索引的文本内容)。
1.5.5 Field  索引中每个文档都包含一个或者多个不同命名的域,文档可能拥有
不止一个同名的域。
1.6 理解搜索过程的核心类  IndexSercher,Term,Query,TermQuery,TopDocs  
1.6.1 IndexSearcher  这个类公开了几个搜索方法,它是连接索引的中心环节。IndexSearcher不能直接打开索引文件,它间接通过Directory
实例在读取索引文件。   
  最简单的一个方法时,传入查询对象(Query)和查询数,最后返回一个TopDocs对象。
  Directory dir=FSDirectory.open(new File("/temp/index"));
  IndexSearcher searcher=new IndexSearcher(dir);
  Query q = new TermQuery(new Term("contents","lucene"));
  TopDocs hits = searcher.search(q,10);
  searcher.close();
1.6.2 Term  Term对象是搜索功能的基本单元。
  Query q = new TermQuery(new Term("contents","lucene"));
  TopDocs hits = searcher.search(1,10);
  上面的代码,表示让Lucene寻找contents域中包含单词lucene的前十个文档。
1.6.3 Query  Lucene含有许多具体的Query(查询)子类。到目前为止,我们只接触了Lucene Query最基本的子类:TermQuery类。
  其他的Query子类还有:BooleanQuery,PrefixQuery等。  
1.6.4 TermQuery  最简单,最基本的查询项。可以查询匹配出指定域中包含指定的文档  。
1.6.5 TopDocs  TopDocs类是一个简单的指针容器。指针一般指向前N个排名的搜索结果(匹配上的文档)。    
备注:
  Lucene 是一个信息检索工具库,而不是一个软件成品。

热点排行