您的位置:首页 > 其它

Lucene In Action 学习笔记(一)

2013-03-11 10:17 405 查看

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 Demo2

1.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 是一个信息检索工具库,而不是一个软件成品。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: