使用的版本是lucene3.1.0
import java.io.File; import java.io.IOException; import java.util.Date; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.queryParser.MultiFieldQueryParser; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.Filter; 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.apache.lucene.util.Version; import org.junit.Test; import org.xfl.lucene.utils.LuceneUtils; public class LuceneIndexSearch{ //当前工程下的resoruce文件夹放要被索引的文件,lucenenIndex放索引文件 String filePath = "resource"; String indexDir = "luceneIndex"; Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_31); /** * 创建索引 * @throws IOException * @throws CorruptIndexException */ @Test public void createIndex() throws CorruptIndexException, IOException { Date startTime = new Date(); Directory dir = FSDirectory.open(new File(indexDir)); IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_31, analyzer); IndexWriter indexWriter = new IndexWriter(dir,iwc); //添加文件到索引 LuceneUtils.file2Document(indexWriter, filePath); Date endTime = new Date(); System.out.println("共有"+indexWriter.numDocs()+"个索引"); System.out.println("总共花了"+(endTime.getTime()-startTime.getTime())+"毫秒时间"); //关闭索引 indexWriter.close(); } /** * 搜索 * @throws IOException * @throws Exception */ @Test public void search() throws IOException, Exception { //要搜索的内容 String queryString = "distribution"; Directory dir = FSDirectory.open(new File(indexDir)); //1、把要搜索的文本解析为Query对象 String[] fields = {"filename","content"}; QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_31, fields, analyzer); //解析对象 Query query = queryParser.parse(queryString); //2、进行查询 IndexSearcher indexSearcher = new IndexSearcher(dir); Filter filter = null; //搜索结果 TopDocs里面有scoreDocs[]数组,里面保存着索引值 TopDocs hits = indexSearcher.search(query,filter, 10000); System.out.println("找到了"+hits.totalHits+"条记录"); //3、打印结果 for(ScoreDoc scoreDocs: hits.scoreDocs ) { int docSn = scoreDocs.doc; Document docs = indexSearcher.doc(docSn); //根据文档编号取出相应的文档 //打印文档信息 LuceneUtils.printDocunentInfo(docs); } } }
********************************************
Lucenen工具类
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.Field.Index; import org.apache.lucene.document.Field.Store; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexWriter; public class LuceneUtils { //存放文件名 name,内容concent,路径path public static void file2Document(IndexWriter writer,String fileDir) throws CorruptIndexException, IOException { File[] files = new File(fileDir).listFiles(); for (int i = 0; i < files.length; i++) { Document doc = new Document(); doc.add(new Field("filename",files[i].getName(),Field.Store.YES,Field.Index.ANALYZED)); doc.add(new Field("content",readFileContent(files[i]),Field.Store.YES,Field.Index.ANALYZED)); doc.add(new Field("size",String.valueOf(files[i].length()),Field.Store.YES,Field.Index.NOT_ANALYZED)); doc.add(new Field("path",files[i].getAbsolutePath(),Store.YES,Index.NO)); writer.addDocument(doc); } } //读取文件内容 private static String readFileContent(File file) { InputStreamReader isr; StringBuffer content = null; try { isr = new InputStreamReader(new FileInputStream(file)); BufferedReader reader = new BufferedReader(isr); content = new StringBuffer(); for (String line = null; (line=reader.readLine())!=null; ) { content.append(line).append("\n"); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return content.toString(); } public static void document2File(Document doc) { } /** * <pre> * 获取filename的方法有两种 * 1、Field field = doc.getField("filename"); * Field field = doc.getField("filename"); * * 2、doc.get("filename"); * </pre> * @param doc */ public static void printDocunentInfo(Document doc) { //Field field = doc.getField("filename"); 第一种方法 //field.stringValue(); System.out.println("filename "+doc.get("filename")); System.out.println("content "+doc.get("content")); System.out.println("size "+doc.get("size")); System.out.println("path "+doc.get("path")); } }