*搜索初步

步骤:

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     }

 

附:

 

posted @ 2018-10-25 15:44  猩生柯北  阅读(137)  评论(0编辑  收藏  举报