Lucene筆記系列(1)——Lucene的理論基礎之全文檢索

本系列開始學習Lucene。web

在咱們處理的數據當中,分爲三類數據:數據庫

結構化數據:具備固定格式或限定長度的數據,如咱們的數據庫中的數據app

非結構化數據:無固定格式、無固定長度的數據,如咱們web上的文本內容等oop

半結構數據:如Json、XML數據。性能

那麼咱們怎麼來處理這些不一樣類型的數據呢?
學習

對於數據庫中的結構化數據,使用SQL語句查詢spa

對於非結構數據,咱們順序掃描、全文檢索.orm

其中,順序掃描就是從數據的開頭的一條數據掃描到最後的一條數據。顯而易見的是,這對於時間、性能都是很大的浪費。索引

那什麼是全文檢索呢?hadoop

這就是Lucene要完成的事情了。下面咱們先看一張圖來描述它在整個系統中所起到的做用:


對lucen上層的應用部分,咱們能夠看到應用手機告終構化的、半結構化的、非結構化的數據,由lucene爲其創建索引文件;另外一種應用則是檢索,用戶經過輸入檢索條件的關鍵詞檢索咱們的索引庫,而後把結果返回給用戶。

那麼什麼是索引?

就像新華字典中的拼音檢索和部首索引用來查字同樣。

在lucene中也是同樣,全文檢索指的是某一個詞在哪些文檔中出現過。例如:

在上圖中,「lucene」這個關鍵詞在第1篇和第3篇文檔中出現過。「Solr」這個關鍵詞在第一、三、5篇文檔中出現過。「hadoop」這個關鍵詞在第三、五、七、八、9篇文檔中出現過。

這裏咱們把整個過程稱之爲「反向索引」。右邊的每一個關鍵詞的文檔鏈表咱們稱之爲倒排表

什麼是反向索引?

反向索引:這種由字符串到文件的映射是文件到字符串映射的反向過程。其實描述的就是一種映射關係。


建立索引

好吧。那麼建立全文檢索的步驟是怎麼樣的呢?

這裏咱們將建立全文檢索分爲三個步驟或者說須要的三個東西:

須要檢索的數據(Document)

分詞技術(Analyzer)

索引建立(Indexer)


咱們舉個例子吧。

第一步,Document數據實例

個人博客空間

HappyBKs的Lucene文章

HappBKs的Hadoop文章

第二步,分詞技術。(咱們這裏採用標準分詞。)

我|的|博|客|空|間

happybks|的|lucene|文|章

happbks|的|hadoop|文|章

注意,這裏通過標準分詞以後,中文按字進行了切分,英文的大寫字符被轉換爲了小寫。

第三步,索引建立。

Term
ID Term ID Term ID
1 happybks 2 happbks 3
1 2 3
1 lucene 2 hadoop 3
1 2 3
1 2 3
1





















咱們對索引進行合併。

Term ID Term ID Term ID
1 happybks 2,3

1,2,3



1 lucene 2 hadoop 3
1 2,3

1 2,3

1





















這張表就是咱們所說的索引。

如今,咱們來看看,如何利用索引來進行檢索。


索引檢索

分爲四個步驟:

搜索關鍵詞(keywords)

分詞技術(Analyzer)

檢索索引(Search)

返回結果


咱們仍是放到例子裏來梳理步驟。

第一步,得到用戶搜索的關鍵詞

lucene文章

第二步,採用分詞技術

lucene|文|章


第三步,檢索索引。

經過上面的圖咱們能夠看到,倒排表中,包含關鍵詞全部分詞單元的文檔是文檔2.


第四步,將結果——第2篇文檔返回。

本文主要闡述了全文檢索的通常原理和過程。至於lucene用怎樣的數學模型,如何實現全文索引,我會在本系列後面的文章中介紹。

相關文章
相關標籤/搜索