Lucene之索引创建入门级实例

一、需要创建索引的源文件

二、创建索引后的目标文件 

三、可以使用Luke查看生成的目标文件

四、 Field域的属性概述 

1.是否分析

是否对域的内容进行分词处理,前提是我们要对域的内容进行查询

2.是否索引

将Field分析后的词或整个Field值进行索引,只有索引方可搜索到

比如:商品名称、商品简介分析后进行索引,订单号、身份证号不用分析但也要索引,这些将来都要作为查询条件。

3.是否存储

将Field值存储在文档中,存储在文档中的Field才可以从Document中获取。是否存储的标准:是否要将内容展示给用户

比如:商品名称、订单号,凡是将来要从Document中获取的Field都要存储。

Field类

数据类型

Analyzed

是否分析

Indexed

是否索引

Stored

是否存储

说明

StringField(FieldName, FieldValue,Store.YES))

字符串

N

Y

Y或N

这个Field用来构建一个字符串Field,但是不会进行分析,会将整个串存储在索引中,比如(订单号,姓名等)

是否存储在文档中用Store.YES或Store.NO决定

LongField(FieldName, FieldValue,Store.YES)

Long型

Y

Y

Y或N

这个Field用来构建一个Long数字型Field,进行分析和索引,比如(价格)

是否存储在文档中用Store.YES或Store.NO决定

StoredField(FieldName, FieldValue)

重载方法

支持多种类型

N

N

Y

这个Field用来构建不同类型Field

不分析,不索引,但要Field存储在文档中

TextField(FieldName, FieldValue, Store.NO)

TextField(FieldName,reader)

 

字符串或流

Y

Y

Y或N

如果是一个Reader,lucene猜测内容比较多,会采用Unstored的策略

五、代码

1.第一步:创建IndexWriter对象

指定一个分析器,对文档内容进行分析;指定一个分析器,对文档内容进行分析

2.第二步:创建Document对象

3.第三步:创建Field对象,将Field添加到Document对象中

4.第四步:使用IndexWriter对象将Document对象写入索引库

使用IndexWriter对象将Document对象写入索引库,此过程进行索引创建,并将索引和Document对象写入索引库

5.第五步:关闭IndexWriter对象

public class MyLucene {

    //创建索引
    @Test
    public void testCreateIndex() throws Exception{

        //指定索引库的存放位置Directory对象
        Directory directory = FSDirectory.open(new File("D:\\长期数据\\index"));
        //指定一个分析器,对文档内容进行分析
        IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_4_10_3,new StandardAnalyzer());

        //第一步:创建IndexWriter对象
        IndexWriter indexWriter = new IndexWriter(directory,config);

        //第三步:创建Field对象,将Field添加到Document对象中
        File file = new File("D:\\长期数据\\searchsource");
        File[] files = file.listFiles();
        for(File oneFile : files){
            //第二步:创建Document对象
            Document document = new Document();

            //文件名称
            String fileName = oneFile.getName();
            //三个参数(域名,域值,是否存储)
            TextField fileNameField = new TextField("fileName", fileName, Field.Store.YES);

            //文件路径
            String filePath = oneFile.getPath();
            StoredField filePathField = new StoredField("filePath", filePath);

            //文件大小
            Long fileSize = FileUtils.sizeOf(oneFile);
            LongField fileSizeField = new LongField("fileSize", fileSize, Field.Store.YES);

            //文件内容
            String fileContent = FileUtils.readFileToString(oneFile);
            TextField fileContentField = new TextField("fileContent", fileContent, Field.Store.YES);

            document.add(fileNameField);
            document.add(filePathField);
            document.add(fileSizeField);
            document.add(fileContentField);
            //第四步:使用IndexWriter对象将Document对象写入索引库,此过程进行索引创建,并将索引和Document对象写入索引库
            indexWriter.addDocument(document);
        }

        //第五步:关闭IndexWriter对象
        indexWriter.close();

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值