實作步驟
第一步:建立一個Directory對象,也就是索引庫存放的位置。
第二步:建立一個indexReader對象,需要指定Directory對象。
第三步:建立一個indexsearcher對象,需要指定IndexReader對象
第四步:建立一個TermQuery對象,指定查詢的域和查詢的關鍵詞。
第五步:執行查詢。
第六步:傳回查詢結果。周遊查詢結果并輸出。
第七步:關閉IndexReader對象
IndexSearcher搜尋方法
代碼實作
package com.test.lucene.helloworld;
import java.io.File;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.junit.Test;
public class LuceneTestQueryIndex {
// 查詢索引
@Test
public void queryIndex() throws Exception {
// 建立一個Directory對象,也就是索引庫存放的位置。
Directory directory = FSDirectory.open(new File("E:\\study\\test\\index"));
// 建立一個indexReader對象,需要指定Directory對象。
IndexReader indexReader = DirectoryReader.open(directory);
// 建立indexsearcher對象
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
// 建立查詢
Query query = new TermQuery(new Term("filename", "apache"));
// 執行查詢
// 第一個參數是查詢對象,第二個參數是查詢結果傳回的最大值
TopDocs topDocs = indexSearcher.search(query, 10);
// 查詢結果的總條數
System.out.println("查詢結果的總條數:" + topDocs.totalHits);
// 周遊查詢結果
// topDocs.scoreDocs存儲了document對象的id
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
// scoreDoc.doc屬性就是document對象的id
// 根據document的id找到document對象
Document document = indexSearcher.doc(scoreDoc.doc);
System.out.println("filename:"+document.get("filename"));
System.out.println("content:\n"+document.get("content"));
System.out.println("path:"+document.get("path"));
System.out.println("size:"+document.get("size"));
System.out.println("-----------------------------------");
}
// 第七步:關閉IndexReader對象
indexReader.close();
}
}
Topdocs
Lucene搜尋結果可通過TopDocs周遊,TopDocs類提供了少量的屬性,如下:
方法或屬性 | 說明 |
totalHits | 比對搜尋條件的總記錄數 |
scoreDocs | 頂部比對記錄 |
注意:
Search方法需要指定比對記錄數量n:indexSearcher.search(query, n)
TopDocs.totalHits:是比對索引庫中所有記錄的數量
TopDocs.scoreDocs:比對相關度高的前邊記錄數組,scoreDocs的長度小于等于search方法指定的參數n