2018-11-13 全文檢索 -lucene
① 什麼是全文檢索
1.資料的分類
1)結構化資料
格式固定,長度固定,資料型別固定。
例如資料庫中的資料
2)非結構化資料
word文件,pdf文件,郵件,html
格式不固定,長度不固定,資料型別不固定
2.資料的查詢
1)結構化資料的查詢
sql語句,查詢結構化資料的方法,簡單,速度快
2)非結構化資料的查詢
從文字文件中找出包含spring單詞的檔案
1 目測(坑爹呢)
2使用程式把文件讀取到記憶體中,然後匹配字串,順序掃描
3 把非結構化資料變成結構化資料
先根據空格進行字串拆分,得到一個單詞列表,基於單詞列表建立一個索引
然後查詢索引,根據單詞和文件的對應關係找到文件列表,這個過程就叫做全文檢索,
索引;一個為了提高查詢速度 建立某種資料結構的集合。
3.全文檢索
先建立索引然後查詢索引的過程就叫做全文檢索,
索引一次建立可以多次使用,表現為每次查詢速度很快,
② 全文檢索的應用場景
1.搜尋引擎
百度,360搜尋,谷歌,搜狗
2.站內搜尋
論壇搜尋.微博,文章搜尋
3.電商搜尋
淘寶搜尋,京東搜尋
4. 只要是有搜尋的地方,就可以使用全文檢索技術
三丶 什麼是lucene
lucene是一個局域java開發全文檢索工具包
四丶 lucene實現全文檢索的流程,
1 建立索引
1)獲得文件,
原始文件,要基於那些資料來進行搜尋,那麼這些資料就是原始文件
搜尋引擎;使用爬蟲獲得原始文件,
站內搜尋:資料庫中的資料
案例:直接使用io流讀取磁碟上的檔案
2)構建文件物件
對應每個原始文件建立一個document物件
每個document物件中包含多個域 (filed)
域中儲存的就是原始文件資料
域的名稱
域的值
每個文件都是有一個唯一的編號,就是文件id
3)分析文件
就是分詞的過程
1.根據空格進行字串拆分,的到一個單詞列表
2.把單詞統一轉換成小寫
3.去除標點符號
4.去除停用詞
停用詞:無意義的詞
每個關鍵詞都封裝成一個term物件中
term中包含兩部分內容;
關鍵詞所在的域
關鍵詞本身
不同的域中拆分出來的相同的關鍵詞是不同的term
4)建立索引
基於關鍵詞列表建立一個索引,儲存到索引庫中
索引庫中:
索引
document物件
關鍵詞和文件的對應關係
通過詞語找文件, 這種索引的結構膠倒排索引結構
2.查詢索引
1) 使用者查詢介面
使用者輸入查詢條件的地方
例如:百度的搜尋框
2)把關鍵詞封裝成一個查詢物件
要查詢的域
要搜尋的關鍵詞
3)執行查詢
根據要查詢的關鍵詞到對應的域上進行搜尋
4)渲染結果
根據文件的id找到文件物件
對關鍵詞的進行高亮顯示
分頁顯示
最終展示給使用者