一、Lucene/ ElasticSearch這類的搜索引擎和SQL數據庫里的查詢/全文檢索的區別
es也可以理解成是一種數據庫,不僅能提供全文檢索功能,還可以支持各種數值類的區間查詢,聚合計算等,這些和傳統數據庫一樣,從使用場景來說,數據庫一般用來存meta,比如網站用戶,用戶資源等等,這些數據有個特點就是量不會很大,還有就是這些數據一般都比較結構化。
es一般用來存一些流式數據,比如應用日志,這也是目前es應用最廣的方面,這些數據有個特點就是往往結構不固定,比如應用日志,不同的程序員寫得模塊打出來的日志字段數量都不一樣,這種數據就不太方便用數據庫來處理。
最后,一般傳統數據庫,全文檢索都實現的很雞肋,因為一般也沒人用數據庫存文本字段。
上面從使用場景上說明了兩者的區別,從技術上兩者全文檢索的實現都差不多,無非是倒排索引,但是lucene畢竟是專業的,做了十幾年了,索引效率,存儲空間等都比傳統數據庫快很多,技術也迭代的非常快。
延伸閱讀:
二、?Lucene是什么
Lucene是Apache基金會jakarta項目組的一個子項目;Lucene是一個開放源碼的全文檢索引擎工具包,提供了完整的查詢引擎和索引引擎,部分語種文本分析引擎;Lucene并不是一個完整的全文檢索引擎,僅提供了全文檢索引擎架構,但仍可以作為一個工具包結合各類插件為項目提供部分高性能的全文檢索功能;現在常用的ElasticSearch、Solr等全文搜索引擎均是基于Lucene實現的。索引的生成分為兩個部分:
1)創建階段:
添加文檔階段,通過IndexWriter調用addDocument方法生成正向索引文件;文檔添加后,通過flush或merge操作生成倒排索引文件。2) 搜索階段:
用戶通過查詢語句向Lucene發送查詢請求;通過IndexSearch下的IndexReader讀取索引庫內容,獲取文檔索引;得到搜索結果后,基于搜索算法對結果進行排序后返回。