IndexManager.java
package com.witwicky.lucene; import java.io.File; import java.util.ArrayList; import java.util.List; 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.Store; import org.apache.lucene.document.LongField; import org.apache.lucene.document.TextField; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.Term; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.Query; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.Version; import org.junit.Test; import org.wltea.analyzer.lucene.IKAnalyzer; /** * * Lucene索引管理 * * @author Administrator * */ public class IndexManager { /** * 创建索引 * * @throws Exception */ @Test public void IndexCreate() throws Exception { String dataPath = "D:\Lucene\searchsource"; String indexPath = "D:\Lucene\dic"; // 文档集合 List<Document> listDocument = new ArrayList<>(); // 读取文件,创建Document列表 File file = new File(dataPath); for (File f : file.listFiles()) { String fileName = f.getName(); String fileContent = FileUtils.readFileToString(f); long fileSize = FileUtils.sizeOf(f); // 创建文档 Document doc = new Document(); doc.add(new TextField("fileName", fileName, Store.YES)); doc.add(new TextField("fileContent", fileContent, Store.YES)); doc.add(new LongField("fileSize", fileSize, Store.YES)); // 放入文档列表 listDocument.add(doc); } // 创建分词器 // Analyzer analyzer = new StandardAnalyzer(); Analyzer analyzer = new IKAnalyzer(); // 创建写入目录 Directory directory = FSDirectory.open(new File(indexPath)); // 创建写入索引对象的配置对象 IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_4_10_3, analyzer); // 创建写索引对象 IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig); // 将文档添加入写入索引对象的流中 for (Document document : listDocument) { indexWriter.addDocument(document); } // 提交 indexWriter.commit(); // 关闭流 indexWriter.close(); } /** * 删除索引 */ @Test public void delIndex() throws Exception { Analyzer analyzer = new IKAnalyzer(); // Analyzer analyzer = new StandardAnalyzer(); Directory directory = FSDirectory.open(new File("D:\Lucene\dic")); IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_4_10_3, analyzer); IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig); // 删除所有 indexWriter.deleteAll(); // 根据域删除 // 1. // QueryParser queryParser = new QueryParser("fileName", analyzer); // Query query = queryParser.parse("fileName:apache"); // indexWriter.deleteDocuments(term); // 2. // Term term = new Term("fileName", "java"); // indexWriter.deleteDocuments(term); indexWriter.commit(); indexWriter.close(); } /** * 更新索引 * * @throws Exception */ @Test public void updateIndex() throws Exception { Analyzer analyzer = new IKAnalyzer(); // Analyzer analyzer = new StandardAnalyzer(); Directory directory = FSDirectory.open(new File("D:\Lucene\dic")); IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_4_10_3, analyzer); IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig); Term term = new Term("fileName", "adsf"); Document doc = new Document(); doc.add(new TextField("fileName", "adsf", Store.YES)); doc.add(new TextField("fileContent", "vvvvvvvvvvvvvvv", Store.YES)); doc.add(new LongField("fileSize", 200L, Store.YES)); indexWriter.updateDocument(term, doc); indexWriter.commit(); indexWriter.close(); } }
IndexSearch.java
package com.witwicky.lucene; import java.io.File; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.junit.Test; import org.wltea.analyzer.lucene.IKAnalyzer; public class IndexSearch { /** * 索引搜索 */ @Test public void indexSearch() throws Exception { String indexPath = "D:\Lucene\dic"; // 分词器 // Analyzer analyzer = new StandardAnalyzer(); Analyzer analyzer = new IKAnalyzer(); // 查询解析对象 QueryParser queryParser = new QueryParser("fileName", analyzer); Query query = queryParser.parse("fileName:apache"); Directory directory = FSDirectory.open(new File(indexPath)); IndexReader indexReader = DirectoryReader.open(directory); IndexSearcher indexSearcher = new IndexSearcher(indexReader); TopDocs topDocs = indexSearcher.search(query, 10); System.out.println("总记录数:" + topDocs.totalHits); ScoreDoc[] scoreDocs = topDocs.scoreDocs; for (ScoreDoc scoreDoc : scoreDocs) { Document doc = indexSearcher.doc(scoreDoc.doc); System.out.println("名称:" + doc.get("fileName")); // System.out.println("内容:" + doc.get("fileContent")); System.out.println("大小:" + doc.get("fileSize")); } indexReader.close(); } }