Lucene初體驗——Hello Word實現
阿新 • • 發佈:2018-02-22
splay query exe add 技術分享 返回 try pen block
1、創建索引
1 /** 2 * 建立索引 3 */ 4 public void index(){ 5 IndexWriter writer=null; 6 try { 7 //1.創建Directory 8 //Directory directory=new RAMDirectory();//建立在內存中 9 Directory directory=FSDirectory.open(new File("D:/lucene/lucene01"));//創建在硬盤上 10 //2.創建IndexWrite 11 IndexWriterConfig iwc=new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35)); 12 writer=new IndexWriter(directory, iwc); 13 //3.創建Document對象 14 Document doc=null; 15 //4.為Document添加Field 16 File f=newFile("D:/lucene/example"); 17 for (File file:f.listFiles()) { 18 doc=new Document(); 19 doc.add(new Field("content",new FileReader(file))); 20 doc.add(new Field("filename",file.getName(),Field.Store.YES,Field.Index.NOT_ANALYZED)); 21 doc.add(newField("path",file.getAbsolutePath(),Field.Store.YES,Field.Index.NOT_ANALYZED)); 22 //5.通過Index Writer添加文檔到索引中 23 writer.addDocument(doc); 24 } 25 26 27 28 } catch (IOException e) { 29 // TODO Auto-generated catch block 30 e.printStackTrace(); 31 }finally{ 32 if(writer!=null){ 33 try { 34 writer.close(); 35 } catch (IOException e) { 36 // TODO Auto-generated catch block 37 e.printStackTrace(); 38 } 39 } 40 } 41 42 }
2、搜索
1 /*** 2 * 搜索 3 */ 4 public void searcher(){ 5 try { 6 //1.創建Directory 7 Directory directory=FSDirectory.open(new File("D:/lucene/lucene01"));//創建在硬盤上 8 //2.創建IndexReader 9 IndexReader reader=IndexReader.open(directory); 10 //3.根據IndexReader創建IndexSearcher 11 IndexSearcher searcher=new IndexSearcher(reader); 12 //4.創建搜索的Query 13 //創建parser來確定要搜索文件的內容,第二個參數表示搜索的域 14 QueryParser parser=new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35)); 15 //創建query,表示搜索域為content中包含Java的文檔 16 Query query=parser.parse("migrate"); 17 //5.根據searcher搜索並且返回TopDocs 18 //10 搜索條數 19 TopDocs tds=searcher.search(query, 10); 20 //6.根據TopDocs獲取ScoreDoc對象 21 ScoreDoc[] sds= tds.scoreDocs; 22 for (ScoreDoc sd : sds) { 23 //7.根據searcher和ScoreDoc對象獲取具體的document對象 24 Document d=searcher.doc(sd.doc); 25 //8.根據Document對象獲取需要的值 26 System.out.println(d.get("filename")+"["+d.get("path")+"]"); 27 } 28 29 30 //9.關閉reader 31 reader.close(); 32 } catch (CorruptIndexException e) { 33 // TODO Auto-generated catch block 34 e.printStackTrace(); 35 } catch (IOException e) { 36 // TODO Auto-generated catch block 37 e.printStackTrace(); 38 } catch (ParseException e) { 39 // TODO Auto-generated catch block 40 e.printStackTrace(); 41 } 42 }
3、Junit測試
1 @Test 2 public void testIndex(){ 3 HelloLucene hl=new HelloLucene(); 4 hl.index(); 5 } 6 7 @Test 8 public void testSearch(){ 9 HelloLucene hl=new HelloLucene(); 10 hl.searcher(); 11 }
Lucene初體驗——Hello Word實現