記得小馬最早期剛參加工作的時候全文索引用的是Sphinx。 當(dāng)一個功能需要對表中的text varchar等文本進(jìn)行l(wèi)ike查詢時骡尽,MySQL全表掃描很慢遣妥,需要Sphinx。Sphinx能解決性能和中文分詞問題攀细。
Sphinx是一款基于SQL的高性能全文檢索引擎箫踩,Sphinx的性能在眾多全文檢索引擎中也是數(shù)一數(shù)二的爱态,利用Sphinx,我們可以完成比數(shù)據(jù)庫本身更專業(yè)的搜索功能境钟,而且可以有很多針對性的性能優(yōu)化锦担。
使用流程:
1.PHP先把要搜索的短語發(fā)給sphinx服務(wù)器(用API發(fā)起請求),sphinx服務(wù)器返回的是記錄的ID
2.PHP用sphinx返回的ID查詢數(shù)據(jù)庫慨削。
Elasticsearch是啥
百科如是說:
Elasticsearch是一個基于Lucene的搜索服務(wù)器洞渔。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口缚态。Elasticsearch是用Java語言開發(fā)的磁椒,并作為Apache許可條款下的開放源碼發(fā)布,是一種流行的企業(yè)級搜索引擎玫芦。Elasticsearch用于云計算中浆熔,能夠達(dá)到實時搜索,穩(wěn)定桥帆,可靠医增,快速,安裝使用方便环葵。官方客戶端在Java调窍、.NET(C#)、PHP张遭、Python邓萨、Apache Groovy、Ruby和許多其他語言中都是可用的菊卷。根據(jù)DB-Engines的排名顯示缔恳,Elasticsearch是最受歡迎的企業(yè)搜索引擎,其次是Apache Solr洁闰,也是基于Lucene歉甚。
小馬本來想自己整理下這塊東西,無意間看到一篇漫畫式的文章扑眉,特別清晰而且通俗易懂纸泄,忍不住引用了,為作者的良苦用心點贊腰素。
倒排索引
可以通俗理解為使用文本內(nèi)分詞關(guān)鍵字建立索引,搜索時先找到標(biāo)題再找到內(nèi)容(百度谷歌搜索引擎原理)弓千。
搜索引擎原理
Elasticsearch簡介
ES基本概念
呂老師:之前我們說過衡便,Elasticsearch 把操作都封裝成了 HTTP 的 API,我們只要給 Elasticsearch 發(fā)送 HTTP 請求就行。
比如使用curl -XPUT 'http://ip:port/poems'镣陕,就能建立一個名為 Poems 的索引谴餐,其他操作也是類似的。
Elasticsearch 分布式原理
ELK系統(tǒng)
呂老師:但是如果日志接入了ELK 系統(tǒng)就不一樣呆抑。比如系統(tǒng)運(yùn)行過程中岂嗓,突然出現(xiàn)了異常,在日志中就能及時反饋理肺,日志進(jìn)入 ELK 系統(tǒng)中摄闸,我們直接在 Kibana 就能看到日志情況。如果再接入一些實時計算模塊妹萨,還能做實時報警功能年枕。
es集群+elk搭建+kafka搭建分布式日志收集系統(tǒng)。
總結(jié)
反向索引又叫倒排索引乎完,是根據(jù)文章內(nèi)容中的關(guān)鍵字建立索引熏兄。
搜索引擎原理就是建立反向索引。
Elasticsearch 在 Lucene 的基礎(chǔ)上進(jìn)行封裝树姨,實現(xiàn)了分布式搜索引擎摩桶。
Elasticsearch 中的索引、類型和文檔的概念比較重要帽揪,類似于 MySQL 中的數(shù)據(jù)庫硝清、表和行。
Elasticsearch 也是 Master-slave 架構(gòu)转晰,也實現(xiàn)了數(shù)據(jù)的分片和備份芦拿。
Elasticsearch 一個典型應(yīng)用就是 ELK 日志分析系統(tǒng)。
Elasticsearch如何再項目中配合MySQL使用
像的處理流程上面已經(jīng)介紹了查邢,那ES怎么結(jié)合項目呢蔗崎?以下的意思是直接同步DB數(shù)據(jù),然后即可以同時支持查詢考了扰藕。但應(yīng)該會有更高效的協(xié)作方式缓苛,你覺得呢?