Lucene3.5自学系列2-查询的建立--IndexSearch

暂时现写个实例,等有时间在慢慢详写

 

复制代码
 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 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值