public class LuceneUtil {
/**
* 创建索引
* @throws IOException
*/
public void index() {
//2.创建IndexWriter(用来添加索引)
IndexWriter indexWriter = null;
try {
//1.创建Directory
// Directory directory = new RAMDirectory(); 创建在内存中
Directory directory = FSDirectory.open(new File("D:/workspace/Lucence/lucene")); //创建在硬盘上
//2.创建IndexWriter
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36); //创建标准的分词器
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_36,analyzer);
indexWriter = new IndexWriter(directory,iwc);
//3.创建Document对象(一个document对象就是一个索引)
Document document = null;
//4.为Document添加Field(位document对象添加搜索的内容)
File f = new File("D:/workspace/Lucence/document");
for(File file : f.listFiles()) {
document = new Document();
document.add(new Field("content",new FileReader(file))); //内容搜索
//
document.add(new Field("filename",file.getName(),Field.Store.YES,Field.Index.NO));
document.add(new Field("path",file.getAbsolutePath(),Field.Store.YES,Field.Index.NO));
//把文档添加到索引中
indexWriter.addDocument(document);
}
//5.通过IndexWriter添加文档到索引中
} catch(Exception e) {
} finally {
try {
indexWriter.close();
} catch (CorruptIndexException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 搜索
*/
public void search() {
try {
//1.创建Directory
Directory directory = FSDirectory.open(new File("D:/workspace/Lucence/lucene"));
//2.创建IndexReader
IndexReader reader = IndexReader.open(directory);
//3.根据IndexReader创建IndexSearch
IndexSearcher search = new IndexSearcher(reader);
//4.创建搜索的Query
//创建parser要确定搜索的内容
QueryParser parser = new QueryParser(Version.LUCENE_36,"content",new StandardAnalyzer(Version.LUCENE_36));
Query query = parser.parse("s h e l l");//搜索内容(content)包含java的文档
//5.根据search搜索并且返回TopDocs
TopDocs tds = search.search(query, 10);
//6.根据TopDocs获取scoreDocs对象
ScoreDoc[] sds = tds.scoreDocs;
for (ScoreDoc scoreDoc : sds) {
//7.根据search和scoreDocs对象获取具体的Document对象
Document d = search.doc(scoreDoc.doc);
//8.根据Document对象获取需要的值
System.out.println(d.get("filename"));;
}
//9.关闭reader
reader.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}