Elasticsearch是一個(gè)分布式、高擴(kuò)展、高實(shí)時(shí)的搜索與數(shù)據(jù)分析引擎。它能很方便的使大量數(shù)據(jù)具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸縮性,能使數(shù)據(jù)在生產(chǎn)環(huán)境變得更有價(jià)值。Elasticsearch的實(shí)現(xiàn)原理主要分為以下幾個(gè)步驟,首先用戶將數(shù)據(jù)提交到Elasticsearch 數(shù)據(jù)庫(kù) 中,再通過分詞控制器去將對(duì)應(yīng)的語(yǔ)句分詞,將其權(quán)重和分詞結(jié)果一并存入數(shù)據(jù),當(dāng)用戶搜索數(shù)據(jù)時(shí)候,再根據(jù)權(quán)重將結(jié)果排名,打分,再將返回結(jié)果呈現(xiàn)給用戶。
Elasticsearch是與名為L(zhǎng)ogstash的數(shù)據(jù)收集和日志解析引擎以及名為Kibana的分析和可視化平臺(tái)一起開發(fā)的。這三個(gè)產(chǎn)品被設(shè)計(jì)成一個(gè)集成解決方案,稱為“Elastic Stack”(以前稱為“ELK stack”)。
Elasticsearch可以用于搜索各種文檔。它提供可擴(kuò)展的搜索,具有接近實(shí)時(shí)的搜索,并支持多租戶?!盓lasticsearch是分布式的,這意味著索引可以被分成分片,每個(gè)分片可以有0個(gè)或多個(gè)副本。每個(gè)節(jié)點(diǎn)托管一個(gè)或多個(gè)分片,并充當(dāng)協(xié)調(diào)器將操作委托給正確的分片。再平衡和路由是自動(dòng)完成的?!跋嚓P(guān)數(shù)據(jù)通常存儲(chǔ)在同一個(gè)索引中,該索引由一個(gè)或多個(gè)主分片和零個(gè)或多個(gè)復(fù)制分片組成。一旦創(chuàng)建了索引,就不能更改主分片的數(shù)量。
Elasticsearch使用Lucene,并試圖通過JSON和Java API提供其所有特性。它支持facetting和percolating,如果新文檔與注冊(cè)查詢匹配,這對(duì)于通知非常有用。另一個(gè)特性稱為“網(wǎng)關(guān)”,處理索引的長(zhǎng)期持久性;例如,在服務(wù)器崩潰的情況下,可以從網(wǎng)關(guān)恢復(fù)索引。Elasticsearch支持實(shí)時(shí)GET請(qǐng)求,適合作為NoSQL數(shù)據(jù)存儲(chǔ),但缺少分布式事務(wù)。