Elasticsearch-head使用及ES相關概念

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

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

  仔細觀察,咱們會發現客戶端默認鏈接的是咱們elasticsearch的默認路徑。而此時elasticsearch服務未啓動,因此集羣健康值是未鏈接數據庫

  集羣健康值的幾種狀態以下:json

綠色,最健康的狀態,表明全部的分片包括備份均可用瀏覽器

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

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

灰色,未鏈接到elasticsearch服務分佈式

此時,咱們啓動elasticsearch服務,從新刷新瀏覽器,發現集羣健康值變成了黃色,以下:ide

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

 

1、概覽

  經過上圖能夠看到咱們的節點名稱爲elasticsearch,而且該節點下有兩個索引test_index一、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

相關文章
相關標籤/搜索