一、需要创建索引的源文件
二、创建索引后的目标文件
三、可以使用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();
}
}