1 功能一:创建索引库
使用indexwriter对象创建索引
1.1 实现步骤
创建一个java工程,并导入jar包。
第一步:创建一个indexwriter对象。
1.1指定索引库的存放位置Directory对象
1.2指定一个分析器,对文档内容进行分析。
第二步:创建document对象。
第三步:创建field对象,将field添加到document对象中。
第四步:使用indexwriter对象将document对象写入索引库,此过程进行索引创建。并将索引和document对象写入索引库。
第五步:关闭IndexWriter对象。
1.2 代码实现
// 创建索引
@Test
public void testIndex() throws Exception {
// 创建一个java工程,并导入jar包。
// 第一步:创建一个indexwriter对象。
// 1.1指定索引库的存放位置Directory对象 F:\lucene\index
Directory directory = FSDirectory.open(new File("F:\\lucene\\index"));
//Directory directory = new RAMDirectory(); //索引库还可以存放到内存中
// 1.2创建indexwriterCofig对象
// 第一个参数:Lucene的版本信息,可以选择对应的lucene版本也可以使用LATEST
// 第二根参数:分析器对象(定一个标准分析器,对文档内容进行分析。)
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig config = new IndexWriterConfig(Version.LATEST, analyzer);
IndexWriter indexWriter = new IndexWriter(directory, config);//创建indexwriter对象
//原始文档的路径F:\javaeg\index\searchsource
File dir = newFile("F:\\lucene\\searchsource");
for (Filef : dir.listFiles()) {
String fileName = f.getName();//文件名
String fileContent = FileUtils.readFileToString(f);//文件内容
String filePath = f.getPath();//文件路径
long fileSize =FileUtils.sizeOf(f);//文件的大小
// 第三步:创建文件名域 //第一个参数:域的名称 //第二个参数:域的内容 //第三个参数:是否存储
Field fileNameField = new TextField("fileName",fileName, Store.YES);
Field fileContentField = new TextField("fileContent",fileContent, Store.YES);//文件内容域
Field filePathField = new StoredField("filePath",filePath);//文件路径域(不分析、不索引、只存储)
Field fileSizeField = new LongField("fileSize",fileSize, Store.YES);//文件大小域
// 第二步:创建document对象。
Document document = new Document();
document.add(fileNameField);//将field添加到document对象中。
document.add(fileContentField);
document.add(filePathField);
document.add(fileSizeField);
//第四步:使用indexwriter对象将document对象写入索引库,此过程进行索引创建。并将索引和document对象写入索引库。
indexWriter.addDocument(document);
}
// 第五步:关闭IndexWriter对象。
indexWriter.close();
}
2 Api的使用
2.1 存放位置Directory对象
第一步:创建一个indexwriter对象。 // 1.1指定索引库的存放位置Directory对象 F:\javaeg\index\lucene Directory directory = FSDirectory.open(new File("F:\\javaeg\\index\\lucene")); //Directory directory = new RAMDirectory(); //索引库还可以存放到内存中
2.2 Field域的属性
2.2.1 概念
是否分析:是否对域的内容进行分词处理。前提是我们要对域的内容进行查询。
是否索引:将Field分析后的词或整个Field值进行索引,只有索引方可搜索到。
比如:商品名称、商品简介分析后进行索引,订单号、身份证号不用分析但也要索引,这些将来都要作为查询条件。
是否存储:将Field值存储在文档中,存储在文档中的Field才可以从Document中获取
比如:商品名称、订单号,凡是将来要从Document中获取的Field都要存储。
2.2.2 是否存储的标准
是否存储的标准:是否要将内容展示给用户
3 使用Luke工具查看索引文件
3.1 选择索引库
3.2 概述overview
3.3 文档document
3.4 搜索search