Lucene入门
#
Lucene和Application之间的关系
一个简单的搜索应该程序:
假设我们的电脑的目录中含有很多文本文档,我们需要查找哪些文档含有某个关键词。为了实现这种功能,我们首先利用 Lucene 对这个目录中的文档建立索引,然后在建立好的索引中搜索我们所要查找的文档。通过这个例子读者会对如何利用 Lucene 构建自己的搜索应用程序有个比较清楚的认识。
建立索引:
Lucene提供了5个基础的类,他们分别是Document、Field、IndexWriter、Analyzer、Directory
Document:这个是用来描述文档的,可以是一个HTML页面,一封电子邮件,一个文本文件。一个Document对象由多个Field构成的,可以把Document想象成数据库中的一个字段,而Field相当于一个字段(一个Field集合)
Field:Field对象是描述文档的属性的,比如一封电子邮件的内容和标题可以用两个Field描述(Filed的值是文本类型的,如果是其它类型的,则要转换成文本,如日期、数字)
Analyzer:在一个文档被索引之前,需要对文档进行分词处理,这个就由Analyzer来做,Analyzer是一个抽象类,它有不同的实现,针对不同的语言选择不同的Analyzer,Analyzer把分词后的类容交给IndexWriter来建立索引
IndexWriter:是Lucene用来创建索引的一个核心类,它的作用是把一个个Document对象加到索引中来
Directory:这个类代表了 Lucene 的索引的存储的位置,这是一个抽象类,它目前有两个实现,第一个是 FSDirectory,它表示一个存储在文件系统中的索引的位置。第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置(索引库的位置)
搜索文档
利用 Lucene 进行搜索就像建立索引一样也是非常方便的。在上面一部分中,我们已经为一个目录下的文本文档建立好了索引,现在我们就要在这个索引上进行搜索以找到包含某个关键词或短语的文档。Lucene 提供了几个基础的类来完成这个过程,它们分别是呢 IndexSearcher, Term, Query, TermQuery, Hits. 下面我们分别介绍这几个类的功能。
Query
这是一个抽象类,他有多个实现,比如 TermQuery, BooleanQuery, PrefixQuery. 这个类的目的是把用户输入的查询字符串封装成 Lucene 能够识别的 Query。
Term
Term 是搜索的基本单位,一个 Term 对象有两个 String 类型的域组成。生成一个 Term 对象可以有如下一条语句来完成:Term term = new Term(“fieldName”,”queryWord”); 其中第一个参数代表了要在文档的哪一个 Field 上进行查找,第二个参数代表了要查询的关键词。
TermQuery
TermQuery 是抽象类 Query 的一个子类,它同时也是 Lucene 支持的最为基本的一个查询类。生成一个 TermQuery 对象由如下语句完成: TermQuery termQuery = new TermQuery(new Term(“fieldName”,”queryWord”)); 它的构造函数只接受一个参数,那就是一个 Term 对象。
IndexSearcher
IndexSearcher 是用来在建立好的索引上进行搜索的。它只能以只读的方式打开一个索引,所以可以有多个 IndexSearcher 的实例在一个索引上进行操作。
Hits
Hits 是用来保存搜索的结果的。
还没有评论,来说两句吧...