Elasticsearch-head使用及ES相關概念


  elasticsearch-head安裝和介紹已在上一篇講了。

在瀏覽器訪問http://localhost:9100,可看到如下界面,表示啟動成功:

  仔細觀察,我們會發現客戶端默認連接的是我們elasticsearch的默認路徑。而此時elasticsearch服務未啟動,所以集群健康值是未連接

  集群健康值的幾種狀態如下:

綠色,最健康的狀態,代表所有的分片包括備份都可用

黃色,基本的分片可用,但是備份不可用(也可能是沒有備份),下文有提到

紅色,部分的分片可用,表明分片有一部分損壞。此時執行查詢部分數據仍然可以查到,遇到這種情況,還是趕快解決比較好

灰色,未連接到elasticsearch服務

此時,我們啟動elasticsearch服務,重新刷新瀏覽器,發現集群健康值變成了黃色,如下:

集群名字:xwj。在配置文件(elasticsearch.yml)中設置 cluster.name:

 

1、概覽

  通過上圖可以看到我們的節點名稱為elasticsearch,並且該節點下有兩個索引test_index1、test_index2

  在test_index2下,選擇 信息-->索引信息,可以查看該索引的所有信息,包括mappings、setting等等

  在test_index2下,選擇 動作-->關閉/開啟,可以關閉/開啟該索引,關閉后的索引如圖:

           

  在該界面也可以模糊查詢索引、設置刷新頻率等操作。如下圖:

 

 

 

 

 

幾個查詢

集群健康:localhost:9200/_cat/health?v

集群的節點列表:localhost:9200/_cat/nodes?v

查看全部索引:localhost:9200/_cat/indices?v

2、索引

  在這里,可以查看到所有的索引,並且還可以創建一個新的索引,如下圖:

      

創建結構化索引

  上圖創建的索引,點開索引信息,mapping是空的,表示該索引的字段並沒有指定,我們可以在創建索引的時候直接指定其字段名來創建。通過發送http請求來實現。

使用Head的符合查詢 或者postman工具進行創

請求路徑:localhost:9200/book    --》ES服務的ip:端口/要創建的索引名,請求方法:PUT

請求體:

{
    "settings":{
        "number_of_shards":5,   //分片數
        "number_of_replicas":1  //備份數
    },
  //映射文件
    "mappings":{
     //類型名
        "novel":{
       //文檔的所有字段以及類型
            "properties":{
                "name":{
                    "type":"text"
                },
                "author":{
                    "type":"keyword"
                },
                "word_count":{
                    "type":"integer"
                },
                "publish_date":{
                    "type":"date",
                    "format":"yyyy-MM-dd HH:mm:ss || yyyy-MM-dd"   //日期格式化允許的類型
                }
            }
        }
    }
}
View Code

關於結構化索引和非結構化索引的區別:

  結構化索引,類似MySQL,我們會對索引結構做預定義,包括字段名,字段類型等;那么,非結構化索引,就類似Mongo,索引結構未知,根據具體的數據來update索引的mapping

那么如何選擇兩種索引呢,還是跟具體的使用場景有關,結構化相比非結構化,更易優化,性能好些,非結構化相較靈活,只是頻繁update索引mapping會有一定的性能損耗。

重點:需要特別特別注意的是:如果你的索引后期要修改,那么你只能重建一個你要修改成的索引,然后將數據復制到新的索引中,代碼如下

POST  localhost:9200/_reindex

{
  "source": {
    "index": "people"
  },
  "dest": {
    "index": "book"
  }
}

參考:Elasticsearch index fields 重命名 

3、數據瀏覽及相關概念

  這里可看到索引、類型、字段、數據信息,如下圖所示:

  

集群(Cluster): 

  ES是一個分布式的搜索引擎,一般由多台物理機組成。這些物理機,通過配置一個相同的cluster name,互相發現,把自己組織成一個集群

節點(Node):

  同一個集群中的一個Elasticsearch實例就是一個Node。一個機器可以有多個實例,所以並不能說一台機器就是一個node。不過大多數情況下每個node運行在一個獨立的環境或虛擬機上。

Node類型:

1)data node: 存儲index數據。Data nodes hold data and perform data related operations such as CRUD, search, and aggregations.

2)client node: 不存儲index,處理轉發客戶端請求到Data Node。

3)master node: 不存儲index,集群管理,如管理路由信息(routing infomation),判斷node是否available,當有node出現或消失時重定位分片(shards),當有node failure時協調恢復。

(所有的master node會選舉出一個master leader node)

詳情參考官網:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html

分片(shard):

  分片,ES是分布式搜索引擎,每個索引有一個或多個分片,索引的數據被分配到各個分片上,相當於一桶水用了N個杯子裝,分片有助於橫向擴展,N個分片會被盡可能平均地(rebalance)分配在不同的節點上(例如你有2個節點,4個主分片(不考慮備份),那么每個節點會分到2個分片,后來你增加了2個節點,那么你這4個節點上都會有1個分片,這個過程叫relocation,ES感知后自動完成),分片是獨立的,對於一個Search Request的行為,每個分片都會執行這個Request.

主分片(Primary shard):

  索引(下文介紹)的一個物理子集同一個索引在物理上可以切多個分片,分布到不同的節點上。分片的實現是Lucene 中的索引。

注意:ES中一個索引的分片個數是建立索引時就要指定的,建立后不可再改變。所以開始建一個索引時,就要預計數據規模,將分片的個數分配在一個合理的范圍。

副本分片(Replica shard):

  可以理解為備份分片。每個主分片可以有一個或者多個副本,個數是用戶自己配置的。ES會盡量將同一索引的不同分片分布到不同的節點上,提高容錯性對一個索引,只要不是所有shards所在的機器都掛了,就還能用主分片和備分片不會出現在同一個節點上(防止單點故障),默認情況一個索引創建5個分片一個副本(一個副本是指復制一次,有幾個分片復制幾個)(即5 primary+5 replica=10個分片)。如果你只有一個節點,那么5個replica都無法分配(unassigned),此時cluster status會變成Yellow

eg:新建兩個索引testshards和testa,選擇的 分片數和副本數分別為(5,2)和(1,1),建索引時分片數指 主分片數。

 

replica的作用主要包括:
1.容災:primary分片丟失,replica分片就會被頂上去成為新的主分片,同時根據這個新的主分片創建新的replica,集群數據安然無恙
2.提高查詢性能:replica和primary分片的數據是相同的,所以對於一個query既可以查主分片也可以查備分片,在合適的范圍內多個replica性能會更優(但要考慮資源占用也會提升[cpu/disk/heap]),另外index request只能發生在主分片上,replica不能執行index request。
對於一個索引,除非重建索引否則不能調整分片的數目(主分片數, number_of_shards),但可以隨時調整replica數(number_of_replicas)。

 

索引(Index):

  邏輯概念,一個可檢索的文檔對象(documents)的集合。類似與DB中的database概念。同一個集群中可建立多個索引。比如,生產環境常見的一種方法,對每個月產生的數據建索引,以保證單個索引的量級可控。

類型(Type):

  索引的下一級概念,相當於數據庫中的table同一個索引里可以包含多個 Type。  數據瀏覽tab中,選中某個索引或者類型,都可以看它對應的類型或索引。

文檔(Document):

  即搜索引擎中的文檔概念,也是ES中一個可以被檢索的基本單位,相當於數據庫中的row,一條記錄

字段(Field):

  相當於數據庫中的column。ES中,每個文檔,其實是以json形式存儲的。而一個文檔可以被視為多個字段的集合。比如一篇文章,可能包括了主題、摘要、正文、作者、時間等信息,每個信息都是一個字段,最后被整合成一個json串,落地到磁盤。

映射(Mapping):

  相當於數據庫中的schema,用來約束字段的類型,不過 Elasticsearch 的 mapping 可以不顯示地指定、自動根據文檔數據創建。

ES比傳統關系型數據庫,對一些概念上的理解:

Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices   -> Types  -> Documents -> Fields

參考:

ElasticSearch的基本原理與用法

全文搜索之 Elasticsearch

 

4、基本查詢

  在這個頁簽,可以做數據項簡單的查詢(只能做查詢)。

  

  選擇一個索引,然后再選擇不同的查詢條件,勾選“顯示查詢語句”,最后點擊搜索,可以看到具體的查詢json和查詢結果

  至於不同組合的查詢條件表示的意思 -> ElasticSearch查詢

5、復合查詢

  在這個頁簽,可以使用json進行復雜的查詢,也可發送put請求新增及跟新索引,使用delete請求刪除索引等等。如圖所示:

  

  該頁簽的簡單使用 -> ElasticSearch索引文檔的增刪改查  

 當然也可以采用postman去執行這些操作 -> ElasticSearch數據導入By Postman

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM