Lucene学习教程——Lucene索引创建

一. 前言

            这篇文章就带大家学习如何创建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 的搜索。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值