/**
* 利用我们创建的索引,进行搜索
*/
public void search(){
IndexReader indexReader = null;
try {
//1、创建Directory(去哪里搜索索引)
Directory directory = FSDirectory.open(new File("e:/lucene/index01"));
//2、创建IndexReader(读取索引的工具)
indexReader = IndexReader.open(directory);
//3、根据IndexReader创建IndexSearcher
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
//4、创建搜索的Query(查询字符串)
//4.1 创建QueryParser来确定要搜索文件的内容,第二个参数表示搜索的域
/**
* QueryParser(Version matchVersion, String f, Analyzer a)方法解析:
* 参数一:适配版本
* 参数二:搜索域(Field对象的key)
* 参数三:分词器
*/
QueryParser queryParser = new QueryParser(Version.LUCENE_35,"content", new StandardAnalyzer(Version.LUCENE_35));
//4.2 创建Query,表示搜索域为“content”中包含“公主”的文档
Query query = queryParser.parse("android");
//5、根据searcher搜索并返回TopDocs文档
TopDocs topDocs = indexSearcher.search(query, 10);//参数二:返回的搜索记录条数
//6、根据TopDocs获取ScoreDoc对象
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
//7、根据searcher和ScoreDoc对象获取具体的Document对象
if (scoreDocs!=null && scoreDocs.length>0){
for (ScoreDoc scoreDoc:scoreDocs){
//scoreDoc.doc:获取文档id
Document document = indexSearcher.doc(scoreDoc.doc);
//8、根据Document对象获取需要的值
System.out.println(document.get("fileName")+":"+document.get("filePath"));
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}finally {
//9、关闭IndexReader
if (indexReader != null){
try {
indexReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}