public class Seacher {
// 索引保存路径
public static String indexDir = "d:/LuceneIndex";
public static void main(String[] args) {
// IndexSearcher
IndexSearcher searcher = null;
try {
// 新建 IndexSearcher
Directory dir = FSDirectory.open(new File(indexDir));
IndexReader reader = IndexReader.open(dir);
searcher = new IndexSearcher(reader);
// 搜索条件
QueryParser parser = new QueryParser(Version.LUCENE_36, "contents",
new StandardAnalyzer(Version.LUCENE_36));
Query query = parser.parse("Hi,Tom");
// 搜索结果
TopDocs hits = searcher.search(query, 10);
// 获取搜索结果
for (ScoreDoc scoreDoc : hits.scoreDocs) {
Document doc = searcher.doc(scoreDoc.doc);
System.out.println(doc.get("contents"));
}
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} finally {
if (searcher != null)
try {
// 关闭 IndexSearcher
searcher.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Lucene中搜索索引,主要是通过IndexSearcher这个类来实现的。IndexSearcher的构造方法是:IndexSearcher(IndexReader r)。IndexReader需要通过FSDirectory.open(new File(indexDir));来获取。
搜索的时候,需要通过QueryParser来生成一个查询条件Query,然后使用TopDocs hits = searcher.search(query, 10);来获取查询的数据。因为通常情况下,不需要所有的查询结果,所以这里只查了10条。
查询得打的TopDocs对象,其实并没有包含我们需要的查询结果,它只包含了我们所查询到的结果的id。需要使用searcher.doc(scoreDoc.doc);方法来获取我们的插叙结果,也就是我们需要的Document。