天天看點

lucene查詢索引

實作步驟

第一步:建立一個Directory對象,也就是索引庫存放的位置。

第二步:建立一個indexReader對象,需要指定Directory對象。

第三步:建立一個indexsearcher對象,需要指定IndexReader對象

第四步:建立一個TermQuery對象,指定查詢的域和查詢的關鍵詞。

第五步:執行查詢。

第六步:傳回查詢結果。周遊查詢結果并輸出。

第七步:關閉IndexReader對象

IndexSearcher搜尋方法

lucene查詢索引

代碼實作

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

繼續閱讀