packagecom.linux.huhx.lucene_1;importorg.apache.commons.io.FileUtils;importorg.apache.lucene.analysis.Analyzer;importorg.apache.lucene.analysis.standard.StandardAnalyzer;importorg.apache.lucene.document.Document;importorg.apache.lucene.document.Field;importorg.apache.lucene.document.StringField;importorg.apache.lucene.document.TextField;importorg.apache.lucene.index.DirectoryReader;importorg.apache.lucene.index.IndexReader;importorg.apache.lucene.index.IndexWriter;importorg.apache.lucene.index.IndexWriterConfig;importorg.apache.lucene.queryparser.classic.QueryParser;importorg.apache.lucene.search.IndexSearcher;importorg.apache.lucene.search.Query;importorg.apache.lucene.search.ScoreDoc;importorg.apache.lucene.search.TopDocs;importorg.apache.lucene.store.Directory;importorg.apache.lucene.store.RAMDirectory;importjava.io.File;importjava.io.IOException;public classBaseLucene_1 {public static void main(String[] args) throwsException {//存放在内存中
Directory dir = newRAMDirectory();newBaseLucene_1().createIndex(dir);newBaseLucene_1().search(dir);
}/*** 创建索引*/
public void createIndex(Directory dir) throwsIOException {
IndexWriter indexWriter= null;//1. 创建 Directory (索引存放位置),这里是参数dir//2. 创建IndexWriter 写索引
Analyzer analyzer = newStandardAnalyzer();
IndexWriterConfig iwc= newIndexWriterConfig(analyzer);
indexWriter= newIndexWriter(dir, iwc);//3. 创建Document 对象 field
Document document;
File file= new File("file/example");for(File f : file.listFiles()) {
document= newDocument();//4. 为Documen添加field
document.add(new Field("content", FileUtils.readFileToString(f, "utf-8"), TextField.TYPE_STORED));
document.add(new TextField("fileName", f.getName(), Field.Store.YES));
document.add(new StringField("filePath", f.getAbsolutePath(), Field.Store.YES));//5. 通过IndexWriter 添加文档到索引中
indexWriter.addDocument(document);
}
indexWriter.close();
}/*** 根据内容搜索
*@paramdir
*@throwsException*/
public void search(Directory dir) throwsException {
IndexReader indexReader= null;//1. 创建 Directory,这里通过参数传递过来的dir//Directory dir = FSDirectory.open(new File("file/index").toPath());//本地磁盘//2. 创建 IndexReader
indexReader =DirectoryReader.open(dir);//3. 创建 IndexSearch
IndexSearcher indexSearcher = newIndexSearcher(indexReader);//4. 创建搜索的Query//创建parse确定搜索的内容,第二个参数为搜索的file
QueryParser queryParser = new QueryParser("content", newStandardAnalyzer());//创建Query,表示搜索域中的内容
Query query = queryParser.parse("love");//5. 搜索并返回 TopDocs
TopDocs topDocs = indexSearcher.search(query, 10);//6. 根据topDocs 获得 scoreDocs
ScoreDoc[] socreDocs =topDocs.scoreDocs;for(ScoreDoc doc : socreDocs) {//获取Document对象
Document document =indexSearcher.doc(doc.doc);//根据Document对象获取需要的值
System.out.println(document.get("fileName"));
System.out.println(document.get("content"));
}
indexReader.close();
}
}