package com.lucene.helloworld; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriter.MaxFieldLength; 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.junit.Test; import com.lucene.utils.LuceneUtils; public class HelloWorld { private String filePath="F:\\tasks\\workspace2\\LucenePro\\luceneDatasource\\jincm_中国.txt"; private String indexPath="F:\\tasks\\workspace2\\LucenePro\\luceneIndex"; private Analyzer analyzer=new StandardAnalyzer(); @Test public void createIndex() throws Exception{ Document doc=LuceneUtils.file2Document(filePath); IndexWriter indexWriter=new IndexWriter(indexPath, analyzer,true,MaxFieldLength.LIMITED); indexWriter.addDocument(doc); indexWriter.close(); } @Test public void search()throws Exception { String queryString="jincm"; String[] fields={"name","content"}; QueryParser queryParser=new MultiFieldQueryParser(fields, analyzer); Query query=queryParser.parse(queryString); IndexSearcher indexSearcher=new IndexSearcher(indexPath); Filter filter=null; TopDocs topDocs=indexSearcher.search(query,filter,10000); System.out.println("总共有【" + topDocs.totalHits + "】条匹配结果"); for(ScoreDoc scoreDoc:topDocs.scoreDocs){ int docIndex=scoreDoc.doc; Document doc=indexSearcher.doc(docIndex); System.out.println("<------------------------------"); System.out.println(doc.get("name")); System.out.println(doc.get("content")); System.out.println(doc.get("size")); System.out.println(doc.get("path")); System.out.println("------------------------------>"); } } }
package com.lucene.utils; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; 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.document.NumberTools; public class LuceneUtils { public static Document file2Document(String filePath){ File file=new File(filePath); Document doc=new Document(); doc.add(new Field("name", file.getName(), Store.YES, Index.ANALYZED)); doc.add(new Field("content",readFileContent(file), Store.YES, Index.ANALYZED)); doc.add(new Field("size", NumberTools.longToString(file.length()), Store.YES, Index.NOT_ANALYZED)); doc.add(new Field("path", file.getAbsolutePath(), Store.YES, Index.NOT_ANALYZED)); return doc; } public static String readFileContent(File file){ try { BufferedReader reader=new BufferedReader(new InputStreamReader(new FileInputStream(file))); StringBuffer content=new StringBuffer(); for(String line=null;(line=reader.readLine())!=null;){ content.append(line); } return content.toString(); } catch (Exception e) { // TODO Auto-generated catch block throw new RuntimeException(); } } }