一. 前言
这篇文章就带大家学习如何创建Lucene的索引。话不多说,直接开始。
二. 环境准备
在创建索引前,首先得把需要的东西准备一下。不然新手很容易在这一块陷入困境。
数据库环境:Mysql5.7 (暂时没用,做项目的时候再用)
Java环境:
JDK: 1.8.0_77
Eclipse:LUNA 工程:普通的Java工程(考虑到有新手,所有没用Maven工程)。
引入的jar包:这里我用的是Lucene4.3.1,采用的分词器是MMSeg4j的分词器。
需要创建索引的文件:(这里我准备4个txt文件,不是很大。用来测试)
三. 创建索引
把环境准备好后,就开始我们的代码,这里直接贴了,在代码中写了注释,大家注意看。
3.1 编写代码
package com.yc.lucene.study;
import java.io.File;
import java.io.FileReader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
/**
* 索引的创建
* @author HM
*
*/
public class IndexCreate {
public void create(){
Directory directory=null;
IndexWriter indexWriter=null;
try {
//1.创建Directory,(我们要确认我们创建的索引是在内存中还是在硬盘中。)
//Directory directory=new RAMDirectory(); //创建内存中的索引
directory=FSDirectory.open(new File("G://lucene/index01")); //创建在硬盘上
//2.创建IndexWrite(通过IndexWrite,来写我们的索引) //这是一种增量索引
Analyzer analyzer=new StandardAnalyzer(Version.LUCENE_43); //创建分词器(此处为标准分词器)
IndexWriterConfig iwc=new IndexWriterConfig(Version.LUCENE_43, analyzer);
indexWriter=new IndexWriter(directory, iwc);
//3.创建Document对象(索引:我们可以索引一篇文档,也可能是数据库中的一张表),假如我们索引的是一篇DPF的文档,那么我们需要索引的路径,名称,大小,时间,内容等。
//这些东西是以文档的属性来存储的。这里面的每一个属性,都叫这个文档的field(域)。相当于数据库中的表与字段的关系。
//Document doc=new Document();
Document doc=null;
//4.为Document对象添加Field(我们要为这篇文档存储些什么内容呢?我们要存储它的标题,它的路径,它的大小、内容)
File files=new File("G://lucene//txt");
//然后我们循环获取当中的每一篇文档,我们首先获取文档的路径、文档的名字、文档的内容
for (File file : files.listFiles()) {
System.out.println("文件: "+file);
doc=new Document();
doc.add(new TextField("content", new FileReader(file))); //对文件内容分词就用textField
doc.add(new StringField("filename", file.getName(),Store.YES)); //Store表示是否将这个文件名存储到硬盘中
doc.add(new StringField("path", file.getPath(),Store.YES));
//5.通过IndexWriter添加文档到索引中
indexWriter.addDocument(doc);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
//6.关闭相关资源
if(indexWriter!=null) indexWriter.close();
if(directory!=null) directory.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
3.2 测试结果
这里我采用的是Junit测试,测试结果如下:
我们再到对应的硬盘目录下面查看一下:G://lucene/index01
此时说明我们的索引文件已经创建成功,接下来我们可以进行下一步Lucene索引的搜索,当然我们也可以借助工具Luke 来进行查看,注意:Luke工具的版本必须与Lucene的版本一致,所以我们采用的Luke也是4.3.1 的。这里上下载地址:http://download.csdn.net/detail/michael_hm/9609872 (之前弄了要下载积分,已经申请管理员修改为0了)我们来用Luke查看一下。
Ps:我在查看的时候发现了中文乱码。
注意:这里面可能会出现中文乱码的情况,所以我们在创建索引的时候,需要转换一下格式。这里我选择的是Utf-8的格式,用Notepad++将那四个txt文件转换为了 utf-8的格式,重新创建了一下索引。再用luke打开,结果如下:
这里就简单的查看了分词的数据。成功的创建了索引。下一篇将介绍Lucene 的搜索。