暂时现写个实例,等有时间在慢慢详写
1 package cn.swust.lucene; 2 3 import java.io.File; 4 import java.io.IOException; 5 6 import org.apache.lucene.analysis.Analyzer; 7 import org.apache.lucene.analysis.standard.StandardAnalyzer; 8 import org.apache.lucene.document.Document; 9 import org.apache.lucene.index.CorruptIndexException; 10 import org.apache.lucene.index.IndexReader; 11 import org.apache.lucene.queryParser.MultiFieldQueryParser; 12 import org.apache.lucene.queryParser.ParseException; 13 import org.apache.lucene.queryParser.QueryParser; 14 import org.apache.lucene.search.IndexSearcher; 15 import org.apache.lucene.search.Query; 16 import org.apache.lucene.search.ScoreDoc; 17 import org.apache.lucene.search.TopDocs; 18 import org.apache.lucene.search.TopScoreDocCollector; 19 import org.apache.lucene.store.Directory; 20 import org.apache.lucene.store.RAMDirectory; 21 import org.apache.lucene.store.SimpleFSDirectory; 22 import org.apache.lucene.util.Version; 23 24 public class Search { 25 private static String INDEX_SORT_PATH = "/home/qingfeideyi/文档/indexstore/"; 26 private static Directory indexDir = new RAMDirectory(); 27 static{ 28 try { 29 indexDir = new SimpleFSDirectory(new File(INDEX_SORT_PATH)); 30 } catch (IOException e) { 31 System.out.println("目录初始化失败"); 32 e.printStackTrace(); 33 } 34 } 35 public void indexSearch(String queryKey) 36 { 37 try { 38 /** 39 * indexSearch = new IndexSearcher(dir);<被弃用> 40 */ 41 IndexReader reader = IndexReader.open(indexDir); 42 IndexSearcher search = new IndexSearcher(reader); 43 44 String []fields = {"FileName","Content"}; 45 Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35); 46 /**创建QueryParser对象,第一个参数表示Lucene的版本,第二个表示搜索Field的字段,第三个表示搜索使用分词器 47 * 注意 QueryParser构造方法中间的参赛为一个String 字符串,即为待检索的字段 48 * MultiFieldQueryParser构造方法中间的参赛为 String 字符串数组,即为 多个检索的字段 49 */ 50 //QueryParser queryParser = new QueryParser(Version.LUCENE_35, field, analyzer); 51 QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_35, fields, analyzer); 52 //生成Query对象 53 Query query = queryParser.parse(queryKey); 54 55 /** 56 * 该方法为低水平得搜索,官方说明:search(Query query, Collector results) Lower-level search API. 57 * 该方法没有返回值,搜索结果应该就在TopScoreDocCollector中,这里应该进行了加权得处理API中说:Note: The 58 * score passed to this method is a raw score. In other words, the score will not necessarily 59 * be a float whose value is between 0 and 1. 60 * 61 TopScoreDocCollector result = TopScoreDocCollector.create(10, true); 62 search.search(query, result); 63 TopDocs docs = result.topDocs(0, 1); 64 */ 65 /** 66 * 常用下面得方法:其中参数3 API为 Finds the top n hits for query.应该翻译为取查询结果的前n个document; 67 * 即hits 应该是指查询的 document; 68 */ 69 //第二个参数表示 每次从索引器中取出记录数量 70 TopDocs docs = search.search(query, 4); 71 //hits.totalHits表示一共搜到多少个 72 System.out.println("共搜索到"+docs.totalHits+"个 '"+queryKey+"'"); 73 //循环hits.scoreDocs数据,并使用indexSearch.doc方法把Document还原,再拿出对应的字段的值 74 for(ScoreDoc scoreDoc :docs.scoreDocs) 75 { 76 System.out.println(scoreDoc.doc); 77 Document doc = search.doc(scoreDoc.doc);// Returns the stored fields of document i. 78 System.out.println(doc.get("FileName")); 79 System.out.println(doc.get("Content")); 80 } 81 search.close(); 82 } catch (CorruptIndexException e) { 83 // TODO Auto-generated catch block 84 e.printStackTrace(); 85 } catch (IOException e) { 86 // TODO Auto-generated catch block 87 e.printStackTrace(); 88 } catch (ParseException e) { 89 System.out.println("Query 初始化失败"); 90 e.printStackTrace(); 91 } 92 } 93 }