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