1. 程式人生 > >lucene的總體架構

lucene的總體架構

Lucene總的來說是:

  • 一個高效的,可擴充套件的,全文檢索庫。
  • 全部用Java實現,無須配置。
  • 僅支援純文字檔案的索引(Indexing)和搜尋(Search)。
  • 不負責由其他格式的檔案抽取純文字檔案,或從網路中抓取檔案的過程。

在Lucene in action中,Lucene 的構架和過程如下圖,

 

說明Lucene 是有索引和搜尋的兩個過程,包含索引建立,索引,搜尋三個要點。

讓我們更細一些看Lucene的各元件:

 

  • 被索引的文件用Document物件 表示。
  • IndexWriter 通過函式addDocument 將文件新增到索引中,實現建立索引的過程。
  • Lucene 的索引是應用反向索引。
  • 當用戶有請求時,Query 代表使用者的查詢語句。
  • IndexSearcher 通過函式search 搜尋Lucene Index
  • IndexSearcher 計算term weight 和score 並且將結果返回給使用者。
  • 返回給使用者的文件集合用TopDocsCollector 表示。

那麼如何應用這些元件呢?

讓我們再詳細到對Lucene API 的呼叫實現索引和搜尋過程。

 

  • 索引過程如下:
    • 建立一個IndexWriter 用來寫索引檔案,它有幾個引數,INDEX_DIR 就是索引檔案所存放的位置,Analyzer
      便是用來對文件進行詞法分析和語言處理的。
    • 建立一個Document 代表我們要索引的文件。
    • 將不同的Field 加入到文件中。我們知道,一篇文件有多種資訊,如題目,作者,修改時間,內容等。不同型別的資訊用不同的Field 來表示,在本例子中,一共有兩類資訊進行了索引,一個是檔案路徑,一個是檔案內容。其中FileReader 的SRC_FILE 就表示要索引的原始檔。
    • IndexWriter 呼叫函式addDocument 將索引寫到索引資料夾中。
  • 搜尋過程如下:
    • IndexReader 將磁碟上的索引資訊讀入到記憶體,INDEX_DIR 就是索引檔案存放的位置。
    • 建立IndexSearcher 準備進行搜尋。
    • 建立Analyer 用來對查詢語句進行詞法分析和語言處理。
    • 建立QueryParser 用來對查詢語句進行語法分析。
    • QueryParser 呼叫parser 進行語法分析,形成查詢語法樹,放到Query 中。
    • IndexSearcher 呼叫search 對查詢語法樹Query 進行搜尋,得到結果TopScoreDocCollector

以上便是Lucene API函式的簡單呼叫。

然而當進入Lucene的原始碼後,發現Lucene有很多包,關係錯綜複雜。

然而通過下圖,我們不難發現,Lucene的各原始碼模組,都是對普通索引和搜尋過程的一種實現。

此圖是上一節介紹的全文檢索的流程對應的Lucene實現的包結構。(參照http://www.lucene.com.cn/about.htm 中文章《開放原始碼的全文檢索引擎Lucene》)

 

  • Lucene 的analysis 模組主要負責詞法分析及語言處理而形成Term
  • Lucene 的index 模組主要負責索引的建立,裡面有IndexWriter
  • Lucene 的store 模組主要負責索引的讀寫。
  • Lucene 的QueryParser 主要負責語法分析。
  • Lucene 的search 模組主要負責對索引的搜尋。
  • Lucene 的similarity 模組主要負責對相關性打分的實現。

瞭解了Lucene的整個結構,我們便可以開始Lucene的原始碼之旅了。

相關推薦

Lucene學習總結之二:Lucene總體架構

api 要點 iter 不同 blank 應用 文件 score image Lucene總的來說是: 一個高效的,可擴展的,全文檢索庫。 全部用Java實現,無須配置。 僅支持純文本文件的索引(Indexing)和搜索(Search)。 不負責由其他格式的文件抽取純文

lucene總體架構

Lucene總的來說是: 一個高效的,可擴充套件的,全文檢索庫。 全部用Java實現,無須配置。 僅支援純文字檔案的索引(Indexing)和搜尋(Search)。 不負責由其他格式的檔案抽取純文字檔案,或從網路中抓取檔案的過程。 在Lucene in action中

二:Lucene總體架構

Lucene總的來說是: 一個高效的,可擴充套件的,全文檢索庫。全部用Java實現,無須配置。僅支援純文字檔案的索引(Indexing)和搜尋(Search)。不負責由其他格式的檔案抽取純文字檔案,或從網路中抓取檔案的過程。 在Lucene in action中,Luce

全文索引----Lucene總體架構

Lucene總的來說是: 1.一個高效的,可擴充套件的,全文檢索庫 2.全部用Java實現,無須配置。 3.僅支援純文字檔案的索引(Indexing)和搜尋(Search)。 引用一個圖 說明Lucene是有索引和搜尋的兩個過程,包含索引建立,索引,搜尋三個要點

Lucene學習總結之二:Lucene總體架構(轉)

Lucene總的來說是: 一個高效的,可擴充套件的,全文檢索庫。 全部用Java實現,無須配置。 僅支援純文字檔案的索引(Indexing)和搜尋(Search)。 不負責由其他格式的檔案抽取純文字檔案,或從網路中抓取檔案的過程。 在Lucene in action

MEF學習總結(1)---總體架構

attr 總結 技術分享 dir target get gre round 管理 用了很久的MEF框架來做依賴註入,最近想把它的原理和機構總結一下,主要包括如下幾個方面: 1. 總體架構 2. .Net Composition Primitive 3. Attribu

《Spring技術內幕》筆記-Spring的設計理念和總體架構

ace app flex nfa 使用 架構 非關系型數據庫 ack pri 1。Spring的主要子項目: ????-1。Spring Framework(Cor

人人都應學習的公鏈知識——比原總體架構

包含 text blog cde 用戶 並不是 生成 產生 塊存儲 本文將會給大家介紹一下比原鏈總體的技術架構。 如下圖所示:比原鏈分為三個層次 第一層就是大家接觸比較多的錢包層,就是進行收款和打款的模塊,錢包一般帶操作界面,大家都可以日常使用,所以會比較熟悉。 然後就是

Dubbo的總體架構

背景 功能 mon 計數 .com tin 獲取 服務調用 橋接 Dubbo的總體架構,如圖所示: Dubbo框架設計一共劃分了10個層,最上面的Service層是留給實際想要使用Dubbo開發分布式服務的開發者實現業務邏輯的接口層。圖中左邊淡藍背景的為服務消費方使用的接

Jetty9原始碼剖析 - 總體架構

轉載自ph0ly:http://www.ph0ly.com 一、概述 Jetty作為高效能Web伺服器,它的架構相比於Tomcat要簡單很多,元件抽象更簡潔,接下來我們就來看下 二、架構 上圖中,綠色部分是Jetty開放給開發者使用的;淺橙色表示JDK或Servlet規範定義的

Dubbo和SpringCloud的優劣勢比較--總體架構

從整體架構上來看,二者模式接近,都需要服務提供方,註冊中心,服務消費方。差異不大。 Dubbo Provider: 暴露服務的提供方,可以通過jar或者容器的方式啟動服務 Consumer:呼叫遠端服務的服務消費方。 Registry: 服務註冊中心和發現中心。 Monitor: 統計服務和呼叫

基於Maven的SSM總體架構設計(一)

基於Maven的SSM總體架構設計(一) 1 概述 1.1 編寫目的 1.2 讀者物件 1.3 引用檔案 1.4 術語表 2 相關技術介紹 2.1 Spring框架介紹 2.1.1

Python總體架構

Python的整體架構可以分為三個主要的部分: 1.Python提供的大量的模組、庫以及使用者自定義的模組。 2.Python的執行時環境,包括物件/型別系統(Object/Type structures)、記憶體分配器(Memory Allocator)和執行時狀態資訊(Current

基於Maven的SSM總體架構設計(二)

3 總體設計 3.1 約定 3.1.1 基於Maven的工程結構         為了便於本團隊對新建Java專案的工程結構及依賴庫(jar)的版本統一,降低團隊成員之間的溝通成本,減少因依賴庫版本不一致導致的異常,我們約定建立標準的Maven工程。即在MyE

(一)HDFS總體架構

1、背景 海量的非結構化資料,幾乎沒法梳理成一個個的欄位,來儲存在關係型資料庫中。所以實際應用中,對於這類資料需要考慮資料如何儲存。資料如何計算的問題。 2、hadoop兩個核心 HDFS(以分散式方式來儲存海量資料) MapReduce(以HDFS上的資料為基礎進行計算

jquery總體架構

( function( global, factory ) { "use strict"; if ( typeof module === "object" && t

Yarn原始碼分析之旅---總體架構---概述與總體架構

歡迎大家討論,我也是接觸時間不長,有問題歡迎大家指正。歡迎轉載,轉載請註明出處 Haddoop 1.0的不足與Hadoop2.0的產生         學習和研究過Hadoop1.0的人都應該知道,在Hadoop1.0中,使用了Master\Slave的架構模式,jobTr

NB-IoT網路總體架構 by PlantUML

1. 準備 基於Sublime的PlantUML開發環境搭好後,準備小試一下。 安裝Sublime 安裝PlantUML外掛 安裝Graphviz元件 參考這裡 2. 元件圖 程式碼@startuml [NB-IoT UE] as UE [E

Model/View框架總體架構

原文:http://book.2cto.com/201209/4214.html Model/View框架中,所有模型類具有共同的抽象基類QAbstractItemModel,所有檢視類具有共同的抽象基類QAbstractItemView,所有委託類具有共同的抽象基類Q

hive 總體架構解析

最近整理了下自己以前的筆記,對Hive整體執行流程做了一些總結。 一、Hive簡介和原理        1)Hive起源          Hive起源於FACEBOOK,由FACEBOOK的幾名員工共同提出。最早提出的Hive概念來源於以下論文Hive——A Ware