根据之前创建的索引进行搜索。
/**
* V Lucene 3.5
* 搜索索引
*/
public static void readIndex(){
IndexSearcher indexSearch = null;
try {
//保存索引文件的地方
Directory dir = new SimpleFSDirectory(new File(LUCENEDATA));
/**
* indexSearch = new IndexSearcher(dir);<被弃用>
*/
indexSearch = new IndexSearcher(IndexReader.open(dir));
//创建QueryParser对象,第一个参数表示Lucene的版本,第二个表示搜索Field的字段,第三个表示搜索使用分词器
QueryParser queryParser = new QueryParser(Version.LUCENE_35,
"name", new StandardAnalyzer(Version.LUCENE_35));
String key = "tESt.html";
//生成Query对象
Query query = queryParser.parse(key);
/**
* 搜索结果 TopDocs里面有scoreDocs[]数组,里面保存着索引值
* API: Finds the top n hits for query
*/
TopDocs hits = indexSearch.search(query, 10);
//hits.totalHits表示一共搜到多少个
System.out.println("共搜索到"+hits.totalHits+"个 '"+key+"'");
//循环hits.scoreDocs数据,并使用indexSearch.doc方法把Document还原,再拿出对应的字段的值
for (ScoreDoc sdoc : hits.scoreDocs) {
Document doc = indexSearch.doc(sdoc.doc);
System.out.println(doc.get("path"));
}
indexSearch.close();
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
System.out.println("There is no index files...");
} catch (ParseException e) {
e.printStackTrace();
}
}
输出结果:
共搜索到4个 'tESt.html'
F:\特效\artDialog\basic\_doc\highlight\test.html
F:\特效\artDialog\_doc\highlight\test.html
F:\特效\basic\_doc\highlight\test.html
F:\特效\zu\highlight\test.html