ElasticSearch核心概念
簡(jiǎn)介
Elasticsearch 是一個(gè)分布式可擴(kuò)展的實(shí)時(shí)搜索和分析引擎,一個(gè)建立在全文搜索引擎 Apache Lucene™ 基礎(chǔ)上的搜索引擎.當(dāng)然 Elasticsearch 并不僅僅是 Lucene 那么簡(jiǎn)單,它不僅包括了全文搜索功能,還可以進(jìn)行以下工作:
- 分布式實(shí)時(shí)文件存儲(chǔ),并將每一個(gè)字段都編入索引,使其可以被搜索。
- 實(shí)時(shí)分析的分布式搜索引擎。
- 可以擴(kuò)展到上百臺(tái)服務(wù)器,處理PB級(jí)別的結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)。
核心概念
以下為ES和Mysql等的對(duì)照關(guān)系
| Relational DB | Elasticsearch |
|---|---|
| 數(shù)據(jù)庫(kù)(database) | 索引(indices) |
| 表(tables) | types |
| 行(rows) | documents |
| 字段(columns) | fields |
文檔
就是類(lèi)似關(guān)系型數(shù)據(jù)庫(kù)的一行行的記錄
elasticsearch是面向文檔的,那么就意味著索弓和搜索數(shù)據(jù)的最小單位是文檔。
elasticsearch中,文檔有幾個(gè)重要屬性:
- 自我包含, 一篇文檔同時(shí)包含字段和對(duì)應(yīng)的值,也就是同時(shí)包含key:value !
- 可以是層次型的
- 靈活的結(jié)構(gòu),文檔不依賴預(yù)先定義的模式,我們知道關(guān)系型數(shù)據(jù)庫(kù)中,要提前定義字段才能使用,在elasticsearch中,對(duì)于字段是非常靈活的,有時(shí)候,我們可以忽略該字段,或者動(dòng)態(tài)的添加一個(gè)新的字段。
盡管我們可以隨意的新增或者忽略某個(gè)字段,但是,每個(gè)字段的類(lèi)型非常重要,比如一一個(gè)年齡字段類(lèi)型,可以是字符串也可以是整形。因?yàn)閑lasticsearch會(huì)保存字段和類(lèi)型之間的映射及其他的設(shè)置。這種映射具體到每個(gè)映射的每種類(lèi)型,這也是為什么在elasticsearch中,類(lèi)型有時(shí)候也稱為映射類(lèi)型。
類(lèi)型
ES7之后Type被舍棄
類(lèi)型是文檔的邏輯容器,就像關(guān)系型數(shù)據(jù)庫(kù)中的表一樣。
類(lèi)型中對(duì)于字段的定義稱為映射,比如name映射為字符串類(lèi)型。
我們說(shuō)文檔是無(wú)模式的 ,它們不需要擁有映射中所定義的所有字段。
但是如果要新增一個(gè)字段,那么elasticsearch的流程是什么?
elasticsearch會(huì)自動(dòng)的將新字段加入映射,但是這個(gè)字段的不確定它是什么類(lèi)型, elasticsearch就開(kāi)始猜,如果這個(gè)值是18 ,那么elasticsearch會(huì)認(rèn)為它是整形。但是elasticsearch也可能猜不對(duì) ,所以最安全的方式就是提前定義好所需要的映射,這點(diǎn)跟關(guān)系型數(shù)據(jù)庫(kù)殊途同歸了,先定義好字段,然后再使用。
索引
可以淺顯的理解為就是數(shù)據(jù)庫(kù)。
索引是映射類(lèi)型的容器, elasticsearch中的索引是一個(gè)非常大的文檔集合。索引存儲(chǔ)了映射類(lèi)型的字段和其他設(shè)置。然后它們被存儲(chǔ)到了各個(gè)分片上。
節(jié)點(diǎn)
Node為集群中的單臺(tái)節(jié)點(diǎn),其可以為master節(jié)點(diǎn)亦可為slave節(jié)點(diǎn)(節(jié)點(diǎn)屬性由集群內(nèi)部選舉得出)并提供存儲(chǔ)相關(guān)數(shù)據(jù)的功能
分片
在es中,默認(rèn)一個(gè)Es就是一個(gè)集群,一個(gè)集群又至少有一個(gè)節(jié)點(diǎn)。而一個(gè)節(jié)點(diǎn)就是一個(gè)es進(jìn)程,節(jié)點(diǎn)可以有多個(gè)默認(rèn)索引,如果你創(chuàng)建新索引,那么索引將會(huì)由5個(gè)分片( primary shard ,又稱主分片)構(gòu)成,每一個(gè)主分片會(huì)有一個(gè)副本( replica shard ,又稱復(fù)制分片)
分片有兩種類(lèi)型:primary主片和replica副本,primary用于文檔存儲(chǔ),Replica shard是Primary Shard的副本,用于冗余數(shù)據(jù)及提高搜索性能。

上圖是一個(gè)有3個(gè)節(jié)點(diǎn)的集群,可以看到主分片和對(duì)應(yīng)的復(fù)制分片都不會(huì)在同一個(gè)節(jié)點(diǎn)內(nèi),這樣有利于某個(gè)節(jié)點(diǎn)掛掉了,數(shù)據(jù)也不至于丟失。
實(shí)際上, 一個(gè)分片是一個(gè)Lucene索引, 一個(gè)包含倒排索引的文件目錄,倒排索引的結(jié)構(gòu)使得elasticsearch在不掃描全部文檔的情況下,就能告訴你哪些文檔包含特定的關(guān)鍵字
倒排索引
elasticsearch使用的是一種稱為倒排索引的結(jié)構(gòu),采用Lucene倒排索作為底層。這種結(jié)構(gòu)適用于快速的全文搜索,一個(gè)索引由文檔中所有不重復(fù)的列表構(gòu)成,對(duì)于每一個(gè)詞,都有一個(gè)包含它的文檔列表。 例如,現(xiàn)在有兩個(gè)文檔,每個(gè)文檔包含如下內(nèi)容:
Study every day, good good up to forever # 文檔1包含的內(nèi)容 To forever, study every day,good good up # 文檔2包含的內(nèi)容
為為創(chuàng)建倒排索引,我們首先要將每個(gè)文檔拆分成獨(dú)立的詞(或稱為詞條或者tokens) ,然后創(chuàng)建一個(gè)包含所有不重復(fù)的詞條的排序列表,然后列出每個(gè)詞條出現(xiàn)在哪個(gè)文檔:

現(xiàn)在,我們?cè)噲D搜索 to forever,只需要查看包含每個(gè)詞條的文檔

兩個(gè)文檔都匹配,但是第一個(gè)文檔比第二個(gè)匹配程度更高。如果沒(méi)有別的條件,現(xiàn)在,這兩個(gè)包含關(guān)鍵字的文檔都將返回。
再來(lái)看一個(gè)示例,比如我們通過(guò)博客標(biāo)簽來(lái)搜索博客文章。那么倒排索引列表就是這樣的一個(gè)結(jié)構(gòu):
| 博客文章(原始數(shù)據(jù)) | 博客文章(原始數(shù)據(jù)) | 索引列表(倒排索引) | 索引列表(倒排索引) |
|---|---|---|---|
| 博客文章ID | 標(biāo)簽 | 標(biāo)簽 | 博客文章ID |
| 1 | python | python | 1,2,3 |
| 2 | python | linux | 3,4 |
| 3 | linux,python | ||
| 4 | linux |
如果要搜索含有python標(biāo)簽的文章,那相對(duì)于查找所有原始數(shù)據(jù)而言,查找倒排索引后的數(shù)據(jù)將會(huì)快的多。只需要查看標(biāo)簽這一欄,然后獲取相關(guān)的文章ID即可。完全過(guò)濾掉無(wú)關(guān)的所有數(shù)據(jù),提高效率!
elasticsearch的索引和Lucene的索引對(duì)比
在elasticsearch中,索引(庫(kù))這個(gè)詞被頻繁使用,這就是術(shù)語(yǔ)的使用。在elasticsearch中 ,索引被分為多個(gè)分片,每份分片是一個(gè)Lucene的索引。所以一個(gè)elasticsearch索引是由多 個(gè)Lucene索引組成的。
到此這篇關(guān)于ElasticSearch簡(jiǎn)介的文章就介紹到這了,更多相關(guān)ElasticSearch簡(jiǎn)介內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用八爪魚(yú)采集器采集滾動(dòng)加載和點(diǎn)擊加載數(shù)據(jù)的教程
現(xiàn)在很多網(wǎng)站的列表,需要向下滾動(dòng)頁(yè)面,才能加載出新數(shù)據(jù)?;蛘唿c(diǎn)擊“查看更多”加載新數(shù)據(jù)。使用廣泛的火車(chē)頭采集器相對(duì)無(wú)力,使用八爪魚(yú)采集器可以采集滾動(dòng)刷新和點(diǎn)擊刷新。2023-05-05
arcgis?pro?3.0.2?安裝及?geemap安裝過(guò)程
ArcGIS?Pro是一個(gè)專業(yè)的桌面GIS應(yīng)用程序,可以探索,可視化,分析和管理二維和三維數(shù)據(jù),這篇文章主要介紹了arcgis?pro?3.0.2安裝及geemap,需要的朋友可以參考下2023-08-08
都2019年了,還問(wèn)http中GET和POST的區(qū)別
最近看了一些同學(xué)的面經(jīng),發(fā)現(xiàn)無(wú)論什么技術(shù)崗位,還是會(huì)問(wèn)到 get 和 post 的區(qū)別,而搜索出來(lái)的答案并不能讓我們裝得一手好逼,那就讓我們從 HTTP 報(bào)文的角度來(lái)擼一波,從而搞明白他們的區(qū)別2019-02-02
Hadoop環(huán)境搭建過(guò)程中遇到的問(wèn)題及解決方法
這篇文章主要介紹了Hadoop環(huán)境搭建過(guò)程中遇到的問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-08-08

