一步一步學lucene——(第一步:概念篇)


信息檢索的概念

信息檢索(Information Retrieval)是指信息按一定的方式組織起來,並根據信息用戶的需要找出有關的信息的過程和技術。狹義的信息檢索就是信息檢索過程的后半部分,即從 信息集合中找出所需要的信息的過程,也就是我們常說的信息查尋(Information Search 或Information Seek)。

我們在下邊研究的lucene就是對信息做全文檢索的一種手段,或者說是一項比較流行的技術,跟google、baidu等專業的搜索引擎比起來會有一定的差距,但是對於普通的企業級應用已經是足夠了。

什么是lucene

Lucene是apache軟件基金會4 jakarta項目組的一個子項目,是一個開放源代碼的全文檢索引擎工具包,即它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的 查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是為軟件開發人員提供一個簡單易用的工具包,以方便的在目標系統中 實現全文檢索的功能,或者是以此為基礎建立起完整的全文檢索引擎。

現在最新的穩定版本是3.6,而且4.0alpha版本也已經推出。

lucene能做什么

首先要明確一點,lucene只是一個軟件類庫,或者一個工具箱,而並不是一個完整的搜索程序。但是它的API非常簡單,可以讓你不用了解復雜的索引和搜索實現的情況下,通過它提供的API,來完成非常復雜的事務處理。

你可以把站內新聞都索引了,做個資料庫;你可以把一個數據庫表的若干個字段索引起來,那就不用再擔心因為“%like%”而鎖表了;你也可以寫個自己的搜索引擎……

應用程序和lucene之間的關系

lucene的工作過程是首先建立索引,將索引保存,然后對索引進行搜索,並且根據搜索的結果找到對應的數據的過程。

關系結構如下:

                            圖:應用程序和lucene之間的關系

lucene中的幾大組件

一、索引組件

創建索引的過程就是首先“獲取內容”,然后根據獲取的內容“建立文檔”,對文檔進行“文檔分析”,最后對文檔建立“文檔索引”的過程。

1、獲取內容

獲取內容的手段很多,可以從上圖的輸入渠道中看到,包括數據庫、文件系統、網絡等多種渠道。

在有些情況下,獲取內容的工作很簡單,比如索引指定目錄下的文件、將數據庫中的內容讀出並進行索引等。

但是有些情況下,獲取內容的工作會很復雜,如操作文件系統、內容管理、各種web站點的數據等。

內容獲取完全可以通過下面提供的開源軟件進行獲取,當然這里只是列出了其中的一部分:

  • solr:Solr是一個高性能,采用Java5開發,基於Lucene的全文搜索服務器。同時對其進行了擴展,提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴展並對查詢性能進行了優化,並且提供了一個完善的功能管理界面,是一款非常優秀的全文搜索引擎。
  • nutch:Nutch 致力於讓每個人能很容易, 同時花費很少就可以配置世界一流的Web搜索引擎。
  • grub:Grub Next Generation 是一個分布式的網頁爬蟲系統,包含客戶端和服務器可以用來維護網頁的索引。
  • Heritrix:Heritrix是一個開源,可擴展的web爬蟲項目。Heritrix設計成嚴格按照robots.txt文件的排除指示和META robots標簽。
  • Aperture:Aperture這個Java框架能夠從各種各樣的資料系統(如:文件系統、Web站點、IMAP和Outlook郵箱)或存在這些系統中的文件(如:文檔、圖片)爬取和搜索其中的全文本內容與元數據。
  • jcrawl:jcrawl是一款小巧性能優良的的web爬蟲,它可以從網頁抓取各種類型的文件,基於用戶定義的符號,比如email,qq。

2、建立文檔

文檔是lucene中建立的小數據塊,也就是說,必須先將這些獲得的內容轉換成文檔,文檔中幾個帶值的域主要包括:標題、正文、摘要、作者和鏈接等。

lucene提供了API來建立域和文檔,但不提供任何建立它們的程序邏輯。

有一些應用可以很好的完成這些工作,下面也列出其中一部分,僅供參考:

  • Tika:Tika是一個內容抽取的工具集合(a toolkit for text extracting)。它集成了POI, Pdfbox 並且為文本抽取工作提供了一個統一的界面。其次,Tika也提供了便利的擴展API,用來豐富其對第三方文件格式的支持。
  • DBSight:DBSight是一個J2EE的搜索平台,可擴展的即時全文搜索任何關系型數據庫,對初學者和專家。它具有內置的數據庫抓取以下用戶定義的SQL ,增量索引,配置的結果排名,突出顯示的搜索結果(如谷歌) ,計數和分類結果(如亞馬遜) 。腳手架支持標簽雲, AJAX搜索建議,以及拼寫檢查。它可以輕松地實現與其他語言的使用XML /簡稱JSON / HTML格式。有一個用戶界面的所有業務,因此沒有Java的編碼是必要的。刪除或更新記錄的數據庫可以同步。內容以外的數據庫還可以進行搜查。
  • Hibernate Search:Hibernate Search的作用是對數據庫中的數據進行檢索的。它是hibernate對著名的全文檢索系統Lucene的一個集成方案,作用在於對數據表中某些內容龐大的字段(如聲明為text的字段)建立全文索引,這樣通過hibernate search就可以對這些字段進行全文檢索后獲得相應的POJO,從而加快了對內容龐大字段進行模糊搜索的速度(sql語句中like匹配)。
  • Compass:Compass是一個強大的,事務的,高性能的對象/搜索引擎映射(OSEM:object/search engine mapping)與一個Java持久層框架.

3、文檔分析

就是分析如何建立索引,怎樣規划,lucene中提供了大量內嵌的分析器能讓你輕松控制這些操作。

4、文檔索引

也就是建立索引的過程,並且通過一個異常簡單的API來完成索引操作。

二、搜索組件

搜索處理的過程就是用戶根據“用戶搜索界面”,“建立查詢”,並且根據“搜索查詢”,得到“展現結果”的過程。

1、用戶搜索界面

我們最熟悉的當然就是baidu和google了。

                                           圖:baidu搜索界面

2、建立查詢

根據提交過來的搜索請求,將查詢的條件組合起來並且交給lucene的查詢解析器中,並且對查詢的內容進行分析處理的過程。

3、搜索查詢

根據查詢解析器組合的查詢條件,查詢檢索索引並返回與查詢語句匹配的文檔的過程。

4、展現結果

一旦獲得匹配的文檔就將結果展現出來的過程,類似於我們日常用到的搜索后的列表。

                                       圖:baidu展現結果頁面

三、其它組件

1、管理組件

如爬蟲要爬取時的規則的規則、時間等需要在管理界面進行統一的設置,對於搜索日志的管理等。

2、分析組件

對於某些關鍵詷搜索的頻率,次數及搜索的習慣等進行分析的部分。

3、搜索范圍

即搜索的范圍是本機的,還是在分布式環境下的,還是基於其它系統的,也就是一個范圍的划分和界定。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM