通过代码我们发现,我们所有的索引都是用的TextField方法,我们经常要对索引进行增删改查,如果都是用TextField,比如文件的路径,我们不会对路径进行分词,是否有索引也没有那么重要,只需要存储即可,那么如果这个时候还是用TextFiled会不会有那么些浪费?Field有多种方法,我们来看一下.
可以将我们的代码进行改造一下:
package com.itheima;
import org.apache.commons.io.FileUtils;
import org.apache.lucene.document.*;
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.junit.Test;
import org.wltea.analyzer.lucene.IKAnalyzer;
import java.io.File;
/**
* @ClassName lucene
* @Description TODO
* @Author gkz
* @Date 2019/8/21 18:02
* @Version 1.0
**/
public class luceneFirst {
@Test
public void createIndex() throws Exception{
// 1.创建一个Director对象,指定索引库的位置。
//把索引保存在内存中
// Directory dictionary=new RAMDirectory();
//把索引保存在磁盘中
Directory directory= FSDirectory.open(new File("E:\\Desktop").toPath());
// 2.基于Directory对象来创建一个indexWriter对象
IndexWriterConfig config=new IndexWriterConfig(new IKAnalyzer());
IndexWriter indexWriter=new IndexWriter(directory,config);
// 3.读取磁盘上的文件,对应每个文件创建一个文档对象。
File file=new File("E:\\Desktop\\87.lucene\\lucene\\02.参考资料\\searchsource");
File[] files=file.listFiles();
for (File file1 : files) {
//取文件名
String file1Name=file1.getName();
//文件的路径
String path=file1.getPath();
//文件的内容
String fileContext = FileUtils.readFileToString(file1, "utf-8");
//文件的大小
long size = FileUtils.sizeOf(file1);
//创建Field
//参数1:域的名称,参数2:域的内容,参数3:是否储存
Field fieldName=new TextField("name",file1Name, Field.Store.YES);
Field fieldPath=new StoredField("path",path);
Field fieldContext=new TextField("context",fileContext, Field.Store.YES);
Field fieldSizeValue=new LongPoint("size",size);
Field fieldSizeStore=new StoredField("size",size);
//创建文档对象
Document document=new Document();
// 4.向文档对象中添加域
document.add(fieldName);
document.add(fieldPath);
document.add(fieldContext);
document.add(fieldSizeValue);
document.add(fieldSizeStore);
// 5.把文档对象写入索引库
indexWriter.addDocument(document);
}
// 6.关闭indexWriter对象
indexWriter.close();
}
}