(1)Directory:
Directory类描述了Lucene索引的存放位置,它是一个抽象,其子类负责具体制定索引的存储路径。FSDirectory.open方法来获取真实文件在文件系统中的存储路径,然后将他们一次传递给IndexWriter类构造方法。
Directory dir = FSDirectory.open(new File(indexDir));
(2)IndexWriter:
负责创建新索引或者打开已有的索引,以及向索引中添加、删除或更新被索引文档的信息。
(3)Analyzer:
在文本文件被索引之前,需要经过Analyzer处理。Analyzer是由IndexWriter构造方法指定的,它负责从被索引文本文件中提取词汇单元,并剔除剩下的无用信息。
代码如下:
writer = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), true,
IndexWriter.MaxFieldLength.UNLIMITED);
(4)Document:
Document对象代表一些域(Field)的集合。可以理解为如web页面、文本文件等。
Document对象的结构比较简单,为一个包含多个Field对象的容器
(5)Field:
指包含能被缩影的文本内容的类。索引中每个文档都有一个或多个不同的域,这些域包含在Field类中。
每个域都有一个域名和对应的域值,以及一组选项来精确控制Lucene索引操作各个域值。
代码解释:
public Indexer(String indexDir)throws IOException{
Directory dir = FSDirectory.open(new File(indexDir));
/*
* Version.LUCENE_30:是版本号参数,Lucene会根据输入的版本值,
* 针对该值对应的版本进行环境和行为匹配
*/
writer = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), true,
IndexWriter.MaxFieldLength.UNLIMITED);
}
首先是Directory通过FSDirectory.open方法开辟一定空间来存储索引,并制定索引的存储路径。然后,创建IndexWriter对象来实现对索引文件的写入操作,如后面的:
writer.addDocument(doc)
添加索引操作。同时,在IndexWriter构造方法中,制定了Analyzer分析器。
protected Document getDocument(File f) throws Exception{
Document doc = new Document();
/**
* contents是域名, new FileReader(f)是域值
* filename是域名,f.getName是域值
* .......
*/
doc.add(new Field("contents", new FileReader(f)));//索引文件内容
doc.add(new Field("filename", f.getName(),//索引文件名
Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.add(new Field("fullpath", f.getCanonicalPath(),//索引文件完整路径
Field.Store.YES, Field.Index.NOT_ANALYZED));
return doc;
}
每一个文本文件都会创建一个文档对象。
numIndexed = indexer.index(dataDir, new TextFilesFilter());
...........
//返回被索引文档文档数
public int index(String dataDir, FileFilter filter)throws Exception{
File[] files = new File(dataDir).listFiles();
for(File f:files){
if(!f.isDirectory() &&
!f.isHidden()&&
f.exists()&&
f.canRead()&&
(filter == null || filter.accept(f))){
indexFile(f);
}
}
return writer.numDocs();
}
//向Lucene索引中添加文档
private void indexFile(File f) throws Exception{
System.out.println("Indexing "+f.getCanonicalPath());
Document doc = getDocument(f);
writer.addDocument(doc);
}
将处理好的索引添加到index文件加下。
分享到:
相关推荐
注:随光盘附带的mirror.rar文件是使用Heritrix从pconline网上抓取的手机信息页面(以网站镜象格式存储),在本书最后搜索引擎完整实例中需要使用到。由于光盘容量有限,笔者删除了原始镜像目录中一部分的网页,可能...
完整的《Lucene+nutch搜索引擎开发》PDF版一共83.6M,无奈我上传的最高限是80M,所以切成两个。这一个是主文件,还需要下载一个副文件Lucene+nutch搜索引擎开发.z01。解压时直接放到一起,解压这个主文件就行了。
nutch+lucene开发自己的搜索引擎 第三章开源搜索引擎入门
Lucene nutch 搜索引擎开发 Part1
学习Lucene和Nutch的入门书籍,学习搜索引擎开发值得一看的书籍
用LUCENE.NET开发搜索引擎,可将sercher\api文件夹中内容换成爬虫爬到的网页图片,可以直接运行的代码
《Lucene+nutch搜索引擎开发》书附带的源代码
licene 实例代码 nutch实例代码 lucene+nutch搜索引擎开发实例代码(王学松版)
Lucene+nutch搜索引擎开发(全本2-1),本电子书共两部分
基于Lucene的全文搜索引擎研究与应用.pdf 详实的介绍Lucene的架构设计分析
开发自己的搜索引擎《lucene2.0+heritrix》一书对应的源码资料,总共有30M,只上传了几个例子. ch2-lucene入门小例子 myReserch-可用的网络搜索引擎
lucene_heritrix 搜索引擎 很好的东西来看看吧
Lucene搜索引擎开发权威经典 光盘 于天恩 著 中国铁道出版社出版 2008-10 这本书基于Lucene的当前最新版本(2.1)精解了Lucene搜索引擎的相关知识,从基础知识到应用开发,精练简洁,恰到好处。 本书共包括16章,...
毕业设计:基于lucene的桌面搜索引擎
Lucene+nutch搜索引擎开发(全本2-2),本电子书共两部分
基于Lucene的搜索引擎的研究与应用基于Lucene的搜索引擎的研究与应用
基于lucene 的简单搜索引擎.rar
使用C sharp开发搜索引擎 C#搜索引擎开发实战 23-Lucene简介(共23页).ppt 使用C sharp开发搜索引擎 C#搜索引擎开发实战 24-索引原理(共22页).ppt 使用C sharp开发搜索引擎 C#搜索引擎开发实战 25-查询原理(共13...
使用C sharp开发搜索引擎 C#搜索引擎开发实战 23-Lucene简介(共23页).ppt 使用C sharp开发搜索引擎 C#搜索引擎开发实战 24-索引原理(共22页).ppt 使用C sharp开发搜索引擎 C#搜索引擎开发实战 25-查询原理(共13...
LUCENE搜索引擎基本工作原理 详细介绍了搜索引擎的工作原理