轉載請注明出處:[http://blog.csdn.net/xiaojimanman/article/details/42804713](http://blog.csdn.net/xiaojimanman/article/details/42804713)
**數據分類:**
對于日常生活中的數據,我們可以大致分為如下三大類:**結構化數據**、**非結構化數據**、**半結構化數據**:
**結構化數據**:指具有固定格式或有限長度的數據,如數據庫行數據:存在數據庫中,可以用二維表結構來邏輯表達實現的數據
**非結構化數據**:指不定長度或者無固定格式的數據,如郵件、word文檔、音頻、超音頻等
**半結構化數據**:對于這種數據可以按照結構化數據來處理,也可以提取純文本按照非結構化數據來處理,如xml數據
對于不同的數據當然就需要采取不同的檢索方式,結構化數據大家也許都很熟悉,可以用熟悉的sql語句進行檢索,如“select * from student where stuno like '2014%'”,這樣一條簡單的sql語句就可以查找到所有學號以2014開始的學生信息了;那對于非結構化的數據又該如何處理呢?使用sql中的like?這答案顯然是否定的,對于非結構化的數據常用的檢索方式有**順序掃描**、**索引(Index)**,不用測試也可以知道,順序掃描的效率還是相當差的,下面就重點的介紹一下對非結構化數據的索引檢索。
**索引步驟:**
對于非結構化數據采用索引檢索又可以說是全文檢索(Full-Text-Search),在索引過程中,我大致給它分成兩大步驟:
索引創建(Indexing):將結構化數據或非結構化數據提取信息創建索引的過程,具體如下圖左半部分所示:
搜索索引(Search)根據用戶的查詢條件,檢索已創建的索引,返回查詢結果的過程,具體如參照下圖右半部分所示:

上圖左半部分就是索引的創建過程,可以將文件系統數據、數據庫數據、web數據等,通過索引的創建,形成最終的索引文件;右半部分是用戶檢索過程,獲取用戶查詢條件,檢索索引庫最終返回檢索結果。
仔細看下上圖,我們很容易會想到下面3個問題:
**索引是什么?**
**如何創建索引?**
**如何進行索引檢索?**
下面就對這三個問題做一一解答。
**索引是什么**
如以前沒有接觸過索引的話,這部分還是很難理解的眾多專業名詞的,因此下面就舉一個簡單的例子來說明下,什么是索引:
?
對于上圖中的三個小圖片我想大家并不會太陌生,那現在大家就開回憶一下,我們在使用新華字典去查找一個漢子解釋的這個過程:通過音節索引或者部首索引查找到想要查找的漢子所在的頁碼數-->翻到對應的頁碼,查看該漢字的解釋。下面我們想一下,如果沒有這些音節索引或者部首索引,我們這次檢索過程是不是會花費很長的時間?不知道到現在,你是不是對索引有了一個大概的了解。
其實上圖中間的部分,就相當于我們這里提到的索引,這種由字符串到文件的映射是文件到字符串映射的反向過程,我們就稱這種信息為**反向索引**。

上圖中左半部分保存的信息,我們一般稱為**字典**,左側每一個字符串指向右側的文檔鏈接,此文檔鏈表稱為**倒排表**。關于新華字典的例子如何和反向索引對應起來這個就自己思考下。
**如何創建索引**
對于索引的創建,我對其總結出一個三步曲:需要檢索的**數據(Document)**、**分詞技術(Analyzer)**、**索引組建(Indexer)**,可以簡單的參照下圖:

我們還是通過簡單的例子來介紹這個過程
第一步數據:Document事例數據:
你好!我是小李。
中國在哪里?
你是誰?
lucene基礎知識學習課程。
你在中石油上學?
中石油在哪里?
第二步:分詞技術,這里采用StandarAnalyzer(標準分詞)
你|好|我|是|小|李|
中|國|在|哪|里|
你|是|誰|
lucene|基|礎|知|識|學|習|課|程|
你|在|中|石|油|上|學|
中|石|油|在|哪|里|
第三步:索引創建字典:

第三步:索引組建合并詞成倒排表:

到現在,索引文件就已經創建完成。
**如何搜索**
對索引的檢索過程,我對其總結出四步曲:**獲取檢索詞(KeyWords**)、**分詞技術(Analyzer)**、**檢索索引(Aearch)**、**返回結果列表**,可以簡單參照下圖:

同樣我們還是繼續接上述事例去說搜索過程
第一步:KeyWord事例數據
中石油
第二步:分詞技術(因為創建索引的時候,采用的是標準分詞,索引在搜索的過程,也應該采用該分詞技術)
中|石|油|
第三步:檢索索引搜索記錄:

第四步:返回結果列表
中石油在哪里?
你在中石油上學?
上述三個問題,都已經通過具體的事例進行了解答,由于自己接觸lucene的時間也只是短短的兩年時間,好多原理自己也不是太清楚,所以自己的這系列的博客不會涉及太多的具體原理,如果想做深入的了解,建議還是買一本參考書對其做系統的了解。
- 前言
- 寫在開始之前
- lucene初始認知
- 索引數學模型
- 索引文件結構
- 創建索引
- 搜索索引
- 分詞器介紹
- Query查詢
- IndexSearcher中檢索方法
- 更新說明
- 案例初識
- JsonUtil & XmlUtil
- 基ClassUtil & CharsetUtil
- ParseUtil & ParseRequest
- 數據庫連接池
- 實現實時索引基本原理
- 實時索引管理類IndexManager
- 實時索引的檢索
- 實時索引的修改
- 查詢語句創建PackQuery
- 縱橫小說更新列表頁抓取
- 縱橫小說簡介頁采集
- 縱橫小說章節列表采集
- 縱橫小說閱讀頁采集
- 縱橫小說數據庫設計
- 縱橫小說數據庫操作
- 縱橫小說分布式采集