一、什麼是搜索
通俗來講就是在任何場景下你通過輸入你想要搜索的內容,然後就期望找到相關度與之匹配的。
比如:
- 百度、Google等搜索引擎
- 站內搜索(垂直搜索):淘寶等電商網站/app、招聘網站、新聞網站等
二、檢索方式
1、數據庫
2、倒排索引
知道了數據庫方式的缺點後再來看Elasticsearch所採取的倒排索引方式。
其實倒排索引本質上是一種數據結構,而不是我上面畫的表格,我這裏是爲了容易理解,就採取了表格代理。這種方式原理上比較好理解。倒排索引後面會出專題來說明。
三、什麼是Elasticsearch
先說下lucene,lucene就是一個jar包,裏面封裝好了一些複雜的API以及包含了倒排索引,數據存儲到磁盤。也就是說lucene是一種採取了倒排索引的方式進行高效率搜索的框架。但是它api複雜,且不支持集羣。而Elasticsearch完美解決了lucene的這些缺點,它天然支持集羣,api相對簡單,開箱即用。底層還是封裝的lucene。
四、Elasticsearch能幹嘛
- 分佈式搜索引擎和數據分析引擎
搜索引擎:百度、Google、電商網站等
數據分析引擎:用戶行爲埋點,常用於大數據分析?你沒發現你在某寶或某東搜個東西,後面都給你推送這類的嗎?
- 全文檢索、結構化搜索以及聚合
全文檢索:全部內容裏找包含的關鍵字:
SELECT * FROM table WHERE name LIKE “%小米%”;
結構化搜索:也稱等值匹配。
SELECT * FROM table WHERE name = “小米手機”;
聚合:比如我們分析每一個商品分類下有多少個商品。
SELECT category_id, COUNT(*) FROM table GROUP BY category_id;
- 海量數據近實時處理
ES自動可以將海量數據分散到多臺服務器上去存儲和檢索,分佈式。
海量數據的處理:分佈式以後,就可以採用大量的服務器去存儲和檢索數據,自然而然就可以實現海量數據的
近實時:檢索個數據要花費好幾分鐘這就不叫近實時,ES可以在秒級別對數據進行搜索和分析。
五、Elasticsearch使用場景
- 百度、維基百科、新聞、電商、Stack Overflow等
- 各大網站的用戶行爲日誌(比如你搜個商品、你點擊某個連接等)
- BI(Business Intelligence:商業智能),數據分析、挖掘
- Github
- ELK