Lucene是apache组织的一个用java实现全文搜索引擎的开源项目。其功能非常的强大,api也很简单。总得来说用Lucene来进行建立和搜索和
操作数据库是差不多的,Document可以看作是数据库的一行记录,Field可以看作是数据库的字段。用lucene实现搜索引擎就像用JDBC实现连接
数据库一样简单。
值得一提的是:2006年6月1号Lucene2.0发布,它与以前广泛应用和介绍的Lucene 1.4.3并不兼容。有了很大的改进和优化,这里只介绍的是
Lucene 2.0。
Lucene2.0的下载地址是http://apache.justdn.org/lucene/java/
大家先看一个例子,通过这个例子来对lucene的一个大概的认识。
一个Junit测试用例:(为了让代码清晰好看,我们将异常都抛出)
a) 这是一个建立文件索引的例子
public void testIndexHello() throws IOException {
Date date1 = new Date();
//可以说是创建一个新的写入工具
//第一个参数是要索引建立在哪个目录里
//第二个参数是新建一个文本分析器,这里用的是标准的大家也可以自己写一个
//第三个参数如果是true,在建立索引之前先将c:\\\\index目录清空。
IndexWriter writer = new IndexWriter("c:\\\\index",new StandardAnalyzer(),true);
//这个是数据源的文件夹
File file = new File("c:\\\\file");
/**
* 例子主要是将C:\\\\file目录下的文件的内容进行建立索引,将文件路径作为搜索内容的附属< span lang="EN-US">.
*/
if(file.isDirectory())
{
String[] fileList = file.list();
for (int i = 0; i < fileList.length; i++) {
// 建立一个新的文档,它可以看作是数据库的一行记录
Document doc = new Document();
File f = new File(file, fileList[i]);
Reader reader = new BufferedReader(new FileReader(f));
doc.add(new Field("file",reader));//为doument添加field
doc.add(new Field("path",f.getAbsolutePath(),Field.Store.YES,Field.Index.NO));
writer.addDocument(doc);
}
}
writer.close();//这一步是必须的,只有这样数据才会被写入索引的目录里
Date date2 = new Date();
System.out.println("用时"+(date2.getTime()-date1.getTime())+"毫秒");
}
注意:因为建立索引本来就是费时,所以说最后输出的用时会比较长,请不要奇怪。
b)一个通过索引来全文检索的例子
public void HelloSearch() throws IOException, ParseException {
IndexSearcher indexSearcher = new IndexSearcher("c:\\\\index");//和上面的IndexWriter一样是一个工具
QueryParser queryParser = new QueryParser("file",new StandardAnalyzer()); //StandardAnalyzer这是一个分词器
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//这个地方Query是抽象类大家也注意一下,下面会讲到的< span style="font-size: 10pt; font-family: 宋体;" lang="EN-US">
// 宋体;" lang="EN-US">
Query query = queryParser.parse(br.readLine());
Hits hits = indexSearcher.search(query);
Document doc = null;
System.out.print("正搜索................");
for (int i = 0; i < hits.length(); i++){
doc = hits.doc(i);
System.out.println("内容是:"+doc.get("file"));//注意这里输出的是什么
System.out.println("文件的路径是:" + doc.get("path"));
}
}
通过上面的两个例子应该可以看出Lucene还是比较简单的。
运行一下上面的两个例子,大家可能会说怎么doc.get(“file”);返回的是空呢,我们马上会讲到。
分享到:
相关推荐
lucene学习笔记 3 .txt lucene入门实战.txt Lucene 的学习 .txt Lucene-2.0学习文档 .txt Lucene入门与使用 .txt lucene性能.txt 大富翁全文索引和查询的例子程序.txt 关于lucene2.0的创建、检索和删除功能...
本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记本人的Lucene2.9学习笔记本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记
lucene学习笔记,lucene入门必备材料
很好的Lucene学习入门资料。lucene是纯java开发的,支持索引的建立和搜索
第一章 LUCENE基础 2 1.1 索引部分的核心类 2 1.2 分词部分的核心类 2 1.3 搜索部分的核心类 2 第二章 索引建立 3 2.1 创建Directory 3 2.2 创建Writer 3 2.3 创建文档并且添加索引 4 2.4 查询索引的基本信息 5 2.5 ...
NULL 博文链接:https://kylinsoong.iteye.com/blog/719415
lucene基础学习笔记&源码
NULL 博文链接:https://menglh.iteye.com/blog/347467
介绍lucene3.5的相关技术,包括基本用法、分析器、索引建立与查询,扩展的高亮、分页、以及solr3.5的相关用法
这是本人学习lucene时候做的笔记,内容较详细,通俗易懂,是入门Lucene的好帮手!欢迎下载!
lucene相关学习资料,包括lucene学习笔记,lucene添加中文分词等
NULL 博文链接:https://lpf.iteye.com/blog/1440160
主要包含Lucene.net 学习笔记和 Lucene.net 系列的代码,一直一些简单的程序