ES 核心概念

ES中:集羣,節點,索引,類型,文檔,分片,映射都是什麼?python

ElasticSearch是面向文檔的,關係型數據庫和ElasticSearch客觀的對比!數據庫

 

 

 

 

 

物理設計:安全

ElasticSearch在後臺把每一個索引劃分紅多個分片,每片分片能夠在集羣中的不一樣服務器之間遷移服務器

邏輯設計:網絡

一個索引類型中,包含多個文檔,例如說文檔1,文檔2,當咱們索引一篇文檔時,能夠經過這樣一個順序找到它:設計

索引 -> 類型 -> 文檔IDblog

經過這個組合咱們就能所引導某個具體的文檔排序

注意:ID沒必要是整數,實際上他是個字符串索引

 

文檔:token

以前說ElasticSearch是面向文檔的,那麼就意味着索引和搜索數據的最小單位是文檔,ElasticSearch中,文檔有幾個重要屬性:

  • 自我包含,一篇文檔同時包含字段和對應的值,也就是同時包含Key:value
  • 能夠是層次型的,一個文檔中包含子文檔,複雜的邏輯實體就是你這麼來的
  • 靈活的結構 ,文檔不依賴預先定義的模式,咱們知道關係型數據庫中,要先提早定義字段才能使用,在ElasticSearch中,對於字段是很是靈活的有時候,有時候咱們能夠忽略該字段,或者動態添加一個新字段

儘管咱們能夠隨意的新增和忽略某個字段,可是每一個字段的類型很是重要,好比一個年齡字段類型,能夠是字符串也能夠是整型,由於ElasticSearch會保存字段和類型之間的映射及其餘的設置,這種映射具體到每一個映射的每種類型,這也是爲何在ElasticSearch中,類型有時候也稱爲映射類型

類型:

類型是文檔的邏輯容器,就像關係型數據庫同樣,表格是行的容器,類型中對於字段的定義成爲映射,好比name映射爲字符串類型,咱們說文檔是無模式的,他們不須要擁有映射中所定義的全部字段,好比新增一個字段,那麼ElasticSearch是則麼作的呢?

ElasticSearch會自動的將新字段加入映射,可是這個字段的不肯定他是什麼類型,ElasticSearch就開始猜,若是這個值是16,那麼ElasticSearch會認爲它是整形,可是ElasticSearch也可能猜不對,因此最安全的方式就是提早定義好所須要的映射,這點跟關係型數據庫異曲同工了,先定義好字段,而後再使用,別瞎整

索引:

索引是映射類型的容器,ElasticSearch中的索引是一個很是的強大的文檔集合,索引存儲了映射類型的字段和其餘設置,而後他們被存儲到了各個分片上,咱們來研究下分片是如何工做的

物理設計:節點和分片 如何工做

一個集羣至少有一個節點,而一個節點就是一個ElasticSearch進程節點能夠有多個索引默認的,若是你建立索引,那麼索引會至少有5個分片(primary shard ,又稱爲主分片)構成的,每個主分片會有一個副本(replica shard,又稱爲複製分片)

 

上圖是一個有3個節點的集羣,能夠看到主分片和對應的複製分片都不會在同一個節點內,這樣有利於某個節點掛掉了,數據也不至於丟失,實際上一個分片就是一個Lucene索引,一個包含倒排索引的文件目錄,倒排索引的結構使得ElasticSearch在不掃描所有文檔的狀況下,就能夠告訴你那些文檔包含特定的關鍵字,不過額,倒排索引是啥?

倒排索引:

ElasticSearch使用的是一種稱爲倒排索引的結構,採用Lucene倒排索引做爲底層,這種結構適用於快速的全文檢索,一個索引由文檔中全部不重複的列表構成,對於每個詞,都包含他的文檔列表,

列如如今有兩個文檔,每一個文檔包含以下內容

 

 

 爲了建立倒排索引,咱們首先要將每一個文檔拆分紅獨立的詞(或稱爲詞條或者tokens),而後建立一個不包含全部補充度的詞條的排序列表,而後列出每一個詞出如今那個文檔

 

 

 如今,咱們視圖搜索 to forever,只須要查看包含每一個詞條的文檔

 

 

 經過二維表的命中,來決定搜索的結果和權重的高低

兩個文檔都匹配,可是第一個文檔比第二個文檔的匹配程度更高,若是沒有別的條件,如今這個劉昂個包含關鍵字的文檔都將返回

在來看一個示例,好比咱們經過博客標題來搜索博客文章,那麼倒排索引列表就是這樣的一個是結構

 

若是要搜索含有python標籤的文章,那相對於查找全部原始數據而言,查找倒排索引後的數據將會快的多,只須要查看標籤這一欄,而後獲取相關的文章ID便可,徹底過濾到無關的數據,來提升檢索的效率

ElasticSearch的索引和Lucene的索引對比
在ElasticSearch中,索引這個詞被頻繁使用,這就是術語的使用,在ElasticSearch中,索引被分爲多個分片,每份分片是一個Lucene的索引,因此一個ElasticSearch索引是由多個Lucene的索引組成的,這沒啥好說的,由於ElasticSearch是使用,Lucene做爲底層的封裝,如無特指,提及索引都是指ElasticSearch的索引

做者:彼岸舞

時間:2020\09\10

內容關於:ElasticSearch

本文來源於網絡,只作技術分享,一律不負任何責任

相關文章
相關標籤/搜索