1. 程式人生 > >Lucene初體驗——Hello Word實現

Lucene初體驗——Hello Word實現

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=new
File("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(new
Field("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實現