步骤:
1.创建Directory (去哪里搜索?)
2.创建IndexReader (通过IndexReader来读取索引)
3.根据IndexReader 创建 IndexSearch
4.创建搜索的Query (查询字符串,和SQL语句差不多的意思)
5.根据search搜索并且返回一个名叫TopDocs的文档
6.根据TopDocs 获得 ScoreDoc 对象
7.根据searcher 和 ScoreDoc对象获取 Document对象
8.根据Document 对象获取需要的值
9.关闭reader
【实践】
HelloLucene.java:
1 /* 2 * 搜索 3 */ 4 public void searcher() throws ParseException{ 5 try { 6 //1.创建Directory (去哪里搜索?) 7 Directory directory = FSDirectory.open(new File("D:/lucene/index01"));//创建在磁盘上 8 9 //2.创建IndexReader (通过IndexReader来读取索引) 10 IndexReader reader = IndexReader.open(directory); 11 12 //3.根据IndexReader 创建 IndexSearch 13 IndexSearcher searcher = new IndexSearcher(reader); 14 15 //4.创建搜索的Query (查询字符串,和SQL语句差不多的意思) 16 //创建parser来确定要搜索的文档的内容。 17 //第二个参数表示要搜索的域 18 QueryParser parser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35)); 19 //创建Query。表示搜索域为content中包含Apache的文档 20 Query query = parser.parse("Apache"); 21 22 //5.根据search搜索并且返回一个名叫TopDocs的文档 23 TopDocs tds = searcher.search(query,10); 24 25 //6.根据TopDocs 获得 ScoreDoc 对象 26 ScoreDoc[] sds = tds.scoreDocs; 27 for(ScoreDoc sd:sds){ 28 //7.根据searcher 和 ScoreDoc对象获取 Document对象 29 Document d = searcher.doc(sd.doc); 30 //8.根据Document 对象获取需要的值 31 System.out.println(d.get("fileName")+ "[" +d.get("path")+ "]"); 32 } 33 //9.关闭reader 34 reader.close(); 35 } catch (CorruptIndexException e) { 36 // TODO Auto-generated catch block 37 e.printStackTrace(); 38 } catch (IOException e) { 39 // TODO Auto-generated catch block 40 e.printStackTrace(); 41 } 42 43 }
测试代码
TestLucene.java:
1 @Test 2 public void testSearch() throws ParseException{ 3 HelloLucene hl = new HelloLucene(); 4 hl.searcher(); 5 }
附: