Lucene
- 11. Lucene是建立索引的基础上进行搜索操作的,SO必须理解几个索引所需要的术语
□ Document: 一个要进行索引的单元,相当于数据库的一行记录,任何想要被索引的
数据都必须转化为Document的对象存放。
□ Field: Document中的一个字段,相当于数据库中的Column, Field是 Lucene中用
的比较多的一个术语。
□ IndexWriter: 负责将Document写入索引文件。通常情况下, IndexWriter的构造函
数包括了以下3个参数:索引存放的路径,分析器和是否重新创建索引。特别需要注
意的一点是,当I ndexWriter执行完 addDocument方法后,一定要记得调用自身的
close方法来关闭它。只有调用了close方法后,索引器才会将存放内存中的所有内容
写入磁盘并关闭输出流。
□ Analyzer 分析器:主要用于文本分词。常用的有StandardAnalyzer分析器,Stop
Analyzer分析器和WhiteSpaceAnalyzer分析器等。
□ Directory :索引存放的位置。 Lucene提供了两种索引存放的位置,一种是磁盘,一种
是内存。一般情况下将索引放在磁盘上;相应地Lucene提供了FSDirectory和
RAMDiretory.
□ Segment段:是Lucene 索引文件最基本的一个单位。 Lucene就是不断地加入新的
Segment,然后按一定的规则算法合并不同的Segment以合成新的Segment。
- 12. 简单地介绍下这5个类的用途。
(1) Document
Document 是用来描述文档的,既可以指一个HTML 文档,又可以指一封电子邮件或者是一个文本文件。
一个 Documenet 对象由多个Field对象组成。
(2)Field
Field 对象是用来描述一个文档的某个属性的,举个例子来说,对于一个HTML文档来说,可以用标题、
内容、发布人、发布日期这4个Field对象分别描述
(3)Analyzer
在一个文档被索引之前,首先需要对文档内容进行分词处理,这部分工作是由Analyzer来做的。这个抽象
类,有多个实现。针对不同的语言和应用程序员需要选择适合的Analyzer.
(4)IndexWriter
IndexWriter 是Lucene用来创建索引的一个核心类,其作用是把一个个的Document对象加到索引中来。
(5)Directory
这个类代表了Lucene索引的存储位置,这是一个抽象类,目前具体实现有两个,第一个是存储在文件系统
中索引的位置;第二个是存储在内存当中索引的位置。
- 14. 搜索引擎建立好索引之后,接下来利用Lucene 所提供的相应类进行搜索。
在上几页PPT中我们已经知道如何为一个目录下的文本文档建立索引,下面
我们可以在这个索引上进行搜索以找到包含某个关键词或短语的文档。Lucene提供
了几个基础的类来完成这个搜索过程,下面分别简单介绍下这几个类的功能。
Query: 这是一个抽象类,有多个实现,如TermQuery、BooleanQuery、PrefixQuery.这个类
的目的是把用户输入的查询字符串封装成lucene能够识别的Query。
Term: 搜素的基本单位。
TermQuery:是抽象类Query的一个子类,同时也是Lucene支持的最为基本的一个查询类。
IndexSearcher: 是用来在建立好的索引上进行搜素的。它只能以只读的方式打开一个索引。
所以可以有多个IndexSearcher的实例在一个索引上进行操作。
Hits:用于保存搜素的结果
Editor's Notes
- 在web应用中,典型的搜索引擎框架包括前端操作以及后端操作。如图1-1 所示。
在前端,用户在搜索引擎接口输入搜索关键词(通常是一个web表单),接着搜素引擎接口将搜索请求解析为搜索引擎可以识别的方式,然后在索引文件上执行搜索操作 ,在经过排序后将搜索结果返回给最终用户。
在后端,网页爬虫或者网页机器人从网络上自动地收集网页,系统中的索引子系统对这些收集来的网页进行解析,然后将这些网页进行索引。
- (1)格式转换
Lucene 只能检索纯文本格式的单词流,因此开发者必须先将所需要检索的数据转化为纯文本
(2)分析
可以将这个过程看成是一个过滤器,这个过滤器可以过滤诸如a,an,the,in,on等连接词以及将大写字母转换为小写字母等
(3) 写索引
在输入的数据被分析完之后,就可以添加到索引中了。