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

来源:互联网 发布:深蓝知乎 编辑:程序博客网 时间:2024/06/05 20:19

一. 前言

            这篇文章就带大家学习如何创建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)));  //对文件内容分词就用textFielddoc.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 的搜索。



1 0