第一部分 lucene简介
一. Lucene简介
Lucene 是基于 Java 的全文信息检索包,它目前是 Apache Jakarta 家族下面的一个开源项目。在这篇文章中,我们首先来看如何利用 Lucene 实现高级搜索功能,然后学习如何利用 Lucene 来创建一个健壮的 Web 搜索应用程序。
下载地址: http://www.apache.org/dist/lucene/java/
参考网站: http://www.chedong.com/tech/lucene.html
二. lucene与应用程序的关系
Lucene可以为你的应用程序添加索引和搜索能力, Lucene可以索引并能使得可以转换成文本格式的任何数据能够被搜索。在图1可以看出,Lucene并不关心数据的来源、格式甚至它的语言,只要你能将它转换为文本。这就意味着你可经索引并搜索存放于文件中的数据:在远程服务器上web页面,存于本地文件系统的文档,简单的文本文件,微软Word文档, HTML或PDF文件或任何其它能够提取出文本信息的格式。
同样,利用Lucene你可以索引存放于数据库中的数据,提供给用户很多数据库没有提供的全文搜索的能力。一旦你集成了Lucene,你的应用程序的用户就可以索引和搜索email邮件,邮件列表档案,即时聊天记录等等更多。
三. lucene中的类层次结构
其中:
org.apache.lucene 最高级的包
org.apache.lucene.analysis 语言分析器
org.apache.Lucene.documen 存储结构
org.apache.Lucene.index 索引入口
org.apache.Lucene.queryParser 查询分析器
org.apache.Lucene.search 搜索入口
org.apache.Lucene.store 底层IO/存储结构
org.apache.Lucene.util 一些公用的数据结构
lucene的组成结构:对于外部应用来说索引模块(index)和检索模块(search)是主要的外部应用入口.
四. 全文检索Lucene和数据库的比较
Lucene的API接口设计的比较通用,输入输出结构都很像数据库的表==>记录==>字段,所以很多传统的应用的文件、数据库等都可以比较方便的映射到Lucene的存储结构/接口中。总体上看:可以先把Lucene当成一个支持全文索引的数据库系统.
五. 一个简单的例子
LuceneDemo1:建立索引
import java.io.File;
import java.io.IOException;
import java.util.Date;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.cn.ChineseAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
public class LuceneDemo1 {
public static void main(String[] args) throws IOException {
//构造一个file用于存入索引文件
File file = new File("c:/index");
//构造一个支持中文的语言分析器
Analyzer analyzer = new ChineseAnalyzer();
try {
//用指定的中文语言分析器构造一个索引书写器indexWriter,第3个参数表示是否为追加索引
IndexWriter indexWriter = new IndexWriter(file,analyzer,true);
Date startData = new Date();
//构造含有2个字段Field的Document对象
//一个为title字段,该字段存储,并且索引,切词
//一个为context字段,该字段存储,并且索引,切词
Document doc = new Document();
doc.add(new Field("title","中华人民共和国",Field.Store.YES,Field.Index.TOKENIZED));
doc.add(new Field("context","北京是中国的首都",Field.Store.YES,Field.Index.TOKENIZED));
Document doc1 = new Document();
doc1.add(new Field("title","中国人民解放军",Field.Store.YES,Field.Index.TOKENIZED));
doc1.add(new Field("context","解放军的首要任务是提高警惕,保卫祖国",Field.Store.YES,Field.Index.TOKENIZED));
//将文档写入到索引书写器indexWriter中
indexWriter.addDocument(doc);
indexWriter.addDocument(doc1);
//优化索引书写器indexWriter
indexWriter.optimize();
//关闭索引书写器indexWriter
indexWriter.close();
Date endData = new Date();
System.out.println("索引建立成功");
System.out.println("建立索引共用了"+(endData.getTime()-startData.getTime())+"毫钞");
} catch (IOException e) {
e.printStackTrace();
}
}
}
索引已经建立完成,当我们运行程序时会在控制台打印出以下消息:
索引建立成功
建立索引共用了200毫钞
在索引过程中可以看到: Lucene并没有规定数据源的格式,而只提供了一个通用的结构(Document对象)来接受索引的输入,因此输入的数据源可以是:数据库,WORD文档,PDF文档,HTML文档……只要能够设计相应的解析转换器将数据源构造成成Docuement对象即可进行索引。
注意: 当我们建立索引时的在一个document中字段名称相同的时,只会第1个段建立索引.
Lucene搜索应用程序的开发
最新推荐文章于 2022-06-26 21:48:48 发布