1. 程式人生 > >Lucene搜索詳解

Lucene搜索詳解

查詢 topn 掌握 ngs 查詢生成器 posit sys parser 變化

學習目標:

  • 掌握lucene搜索的編寫步驟
  • 掌握lucene搜索核心API
  • 掌握lucene提供的基本查詢
  • 掌握查詢解析器的用法及語法

搜索流程詳解

1、架構圖

技術分享圖片

2、Lucene搜索API 圖示

技術分享圖片

3、Lucene搜索代碼示例

public class SearchBaseFlow {
    public static void main(String[] args) throws IOException, ParseException {
        //使用的分詞器
        Analyzer analyzer = new IKAnalyzer4Lucene7(true
); //索引存儲目錄 Directory directory = FSDirectory.open(Paths.get("f:/test/indextest")); //索引讀取器 IndexReader indexReader = DirectoryReader.open(directory); //索引搜索器 IndexSearcher indexSearcher = new IndexSearcher(indexReader); //要搜索的字段 String filedName = "name";
//查詢生成器(解析輸入生成Query查詢對象) QueryParser parser = new QueryParser(filedName, analyzer); //通過parse解析輸入(分詞),生成query對象 Query query = parser.parse("Thinkpad"); //搜索,得到TopN的結果(結果中有命中總數,topN的scoreDocs(評分文檔(文檔id,評分))) TopDocs topDocs = indexSearcher.search(query, 10); //前10條
//獲得總命中數 System.out.println(topDocs.totalHits); //遍歷topN結果的scoreDocs,取出文檔id對應的文檔信息 for (ScoreDoc sdoc : topDocs.scoreDocs) { //根據文檔id取存儲的文檔 Document hitDoc = indexSearcher.doc(sdoc.doc); //取文檔的字段 System.out.println(hitDoc.get(filedName)); } //使用完畢,關閉、釋放資源 indexReader.close(); directory.close(); } }


搜索核心API詳解

1、核心API圖示:

技術分享圖片

2、IndexReader 索引讀取器

Open一個讀取器,讀取的是該時刻點的索引視圖。如果後續索引發生改變,需重新open一個讀取器。獲得索引讀取器的方式:

  • DirectoryReader.open(IndexWriter indexWriter) 優先使用
  • DirectoryReader.open(Directory)
  • DirectoryReader.openIfChanged(DirectoryReader) 共享當前reader資源重新打開一個(當索引變化時)

IndexReader分為兩類:

技術分享圖片

  • 葉子讀取器:支持獲取stored fields, doc values, terms(詞項), and postings (詞項對應的文檔)
  • 復合讀取器:多個讀取器的復合。只可直接用它獲取stored fields 。在內部通過CompositeReader.getSequentialSubReaders 得到裏面的葉子讀取器來獲取其他數據。
  • DirectoryReader 是 復合讀取器

註意:IndexReader是線程安全的。

IndexReader 主要API:

技術分享圖片

LeafReader 主要API:

技術分享圖片

3、IndexSearcher 索引搜索器

  • 應用通過調用它的search(Query,int)重載方法在一個IndexReader上實現搜索。出於性能的考慮,請使用一個IndexSearcher實例,除非索引發生變化。如索引更新了則通過DirectoryReader.openIfChanged(DirectoryReader) 取得新的讀取器,再創建新的搜索器。

註意:IndexSearcher是線程安全的。

4、IndexSearcher 索引搜索器API

搜索 API:

技術分享圖片

獲取文檔 API:

技術分享圖片

TopDocs 搜索命中的結果集 (Top-N)

技術分享圖片

TopFieldDocs 按字段排序的搜索命中結果集

技術分享圖片

ScoreDoc

技術分享圖片



Query查詢詳解



QueryParser詳解

Lucene搜索詳解