package org.lcc.lucene;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.LongField;
import org.apache.lucene.document.StoredField;
import org.apache.lucene.document.StringField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Test;
public class MyLucene {
@Test
public void createDirectory() throws IOException{
//为索引库指定一个地址
//内存地址
//Directory dir = new RAMDirectory();
//本地地址
Directory dir = FSDirectory.open(new File("D:\\DirectoryLucene"));
//创建一个IndexWriter对象
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig indexConfig = new IndexWriterConfig(Version.LATEST, analyzer );
IndexWriter indexW = new IndexWriter(dir, indexConfig);
//读取文件
File fileDir = new File("D:\\SourceLucene");
for(File file:fileDir.listFiles()){
// 文件名称
String name = file.getName();
//文件的内容
String content = FileUtils.readFileToString(file);
//文件的大小
Long size = FileUtils.sizeOf(file);
//文件的路径
String path = file.getPath();
//为每一个File创建一个文档对象
Document doc = new Document();
//创建域
Field nameF = new StringField("name", name, Store.YES);
//Field textF = new StringField("content", content, Store.YES);
Field longF = new LongField("size", size, Store.YES);
Field pathF = new StoredField("path", path);
doc.add(nameF);
doc.add(longF);
//doc.add(textF);
doc.add(pathF);
indexW.addDocument(doc);
}
//关闭Indexwriter
indexW.close();
}
@Test
public void serachIndex() throws IOException{
//指定索引库的地址
Directory directory = FSDirectory.open(new File("D:\\DirectoryLucene"));
//创建一个IndexReader对象
IndexReader ir = DirectoryReader.open(directory);
//创建一个IndexSearch对象
IndexSearcher is = new IndexSearcher(ir);
Query query = new TermQuery(new Term("name","spring.txt"));
TopDocs topDocs = is.search(query, 10);
System.out.println("查询结果条数:"+topDocs.totalHits);
for(ScoreDoc sd:topDocs.scoreDocs){
// sd.doc即是文档的ID
Document doc = is.doc(sd.doc);
System.out.println("文件名称:"+doc.get("name"));
System.out.println("文件路径:"+doc.get("path"));
System.out.println("文件大小:"+doc.get("size"));
}
ir.close();
}
}