1. 程式人生 > >ElasticSearch 全文檢索— ElasticSearch 核心概念

ElasticSearch 全文檢索— ElasticSearch 核心概念

行處理 nod 分詞 關註 使用 stack 分布 creat 一是

ElasticSearch核心概念-Cluster

  1)代表一個集群,集群中有多個節點,其中有一個為主節點,這個主節點是可以通過選舉產生的,主從節點是對於集群內部來說的。es的一個概念就是去中心化,字面上理解就是無中心節點,這是對於集群外部來說的,因為從外部來看es集群,在邏輯上是個整體,你與任何一個節點的通信和與整個es集群通信是等價的。

  2)主節點的職責是負責管理集群狀態,包括管理分片的狀態和副本的狀態,以及節點的發現和刪除。

  3)註意:主節點不負責對數據的增刪改查請求進行處理,只負責維護集群的相關狀態信息。

  集群狀態查看

http://192.168.20.135:9200/_cluster/health?pretty

技術分享圖片

ElasticSearch核心概念-shards

  1)代表索引分片,es可以把一個完整的索引分成多個分片,這樣的好處是可以把一個大的索引水平拆分成多個,分布到不同的節點上。構成分布式搜索, 提供性能和吞吐量。

  2)分片的數量只能在創建索引庫時指定,索引庫創建後不能更改。

[hadoop@masternode elasticsearch-2.4.0]$ curl -XPUT ‘masternode:9200/zimo3/‘ -d‘{"settings":{"number_of_replicas":2}}‘

{"acknowledged":true}

  技術分享圖片

  默認是一個索引庫有5個分片

  每個分片中最多存儲2,147,483,519條數據

https://www.elastic.co/guide/en/elasticsearch/reference/2.4/_basic_concepts.html

ElasticSearch核心概念-replicas

  代表索引副本,es可以給索引分片設置副本,

  副本的作用:

    一是提高系統的容錯性,當某個節點某個分片損壞或丟失時可以從副本中恢復。

    二是提高es的查詢效率,es會自動對搜索請求進行負載均衡。

  【副本的數量可以隨時修改】

  可以在創建索引庫的時候指定

curl -XPUT master:9200/zimo3/
-d{"settings":{"number_of_replicas":2}}‘

  默認是一個分片有1個副本

  index.number_of_replicas: 1

  也可以修改已有庫的副本數目

 [hadoop@masternode elasticsearch-2.4.0]$ curl -XPUT masternode:9200/zimo3/_settings -d{"index":{"number_of_replicas":1}}
{"acknowledged":true}

  技術分享圖片

  可以看到zimo3的副本數目較上面少了一個。

  註意:主分片和副本不會存在一個節點中

ElasticSearch核心概念-recovery

  代表數據恢復或叫數據重新分布,es在有節點加入或退出時會根據機器的負載對索引分片進行重新分配,掛掉的節點重新啟動時也會進行數據恢復。

ElasticSearch核心概念-gateway

  代表es索引的持久化存儲方式,es默認是先把索引存放到內存中,當內存滿了時再持久化到硬盤。當這個es集群關閉再重新啟動時就會從gateway中讀取索引數據。es支持多種類型的gateway,有本地文件系統(默認),分布式文件系統,Hadoop的HDFS和Amazon的s3雲存儲服務。

技術分享圖片

 Hadoop插件安裝

bin/plugin install elasticsearch/elasticsearch-repository-hdfs/2.2.0

 官網安裝說明

https://github.com/elastic/elasticsearch-hadoop/tree/master/repository-hdfs

https://oss.sonatype.org/content/repositories/snapshots/org/elasticsearch/elasticsearch-repository-hdfs/

 Hadoop 插件配置

vi elasticsearch.yml
gateway:
    type: hdfs 
gateway:
    hdfs:
    uri: hdfs://localhost:9000

ElasticSearch核心概discovery.zen

  代表es的自動發現節點機制,es是一個基於p2p的系統,它先通過廣播尋找存在的節點,再通過多播協議來進行節點之間的通信,同時也支持點對點的交互。

  如果是不同網段的節點如何組成es集群

  禁用自動發現機制

discovery.zen.ping.multicast.enabled: false

  設置新節點被啟動時能夠發現的主節點列表

discovery.zen.ping.unicast.hosts: ["192.168.20.135", "192.168.20.136", "192.168.20.137"]

ElasticSearch核心概Transport

  代表es內部節點或集群與客戶端的交互方式,默認內部是使用tcp協議進行交互,同時它支持http協議(json格式)、thrift、servlet、memcached、zeroMQ等的傳輸協議(通過插件方式集成)。

技術分享圖片

ElasticSearch Setting

  settings修改索引庫默認配置

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html

  例如:分片數量,副本數量

  查看:

[hadoop@masternode elasticsearch-2.4.0]$ curl -XGET http://masternode:9200/zimo/_settings?pretty
{
  "zimo" : {
    "settings" : {
      "index" : {
        "creation_date" : "1535008575806",
        "number_of_shards" : "5",
        "number_of_replicas" : "1",
        "uuid" : "oGqP-hgzRGuIxPCssdj3jA",
        "version" : {
          "created" : "2040099"
        }
      }
    }
  }
}

  操作不存在索引(創建):

curl -XPUT http://master:9200/zimo3/ -d {"settings":{"number_of_shards":3,"number_of_replicas":2}}

  操作已存在索引(修改):

curl -XPUT http://master:9200/zimo3/_settings -d {"index":{"number_of_replicas":1}}’

ElasticSearch Mapping

  就是對索引庫中索引的字段名稱及其數據類型進行定義,類似於mysql中的表結構信息。不過es的mapping比數據庫靈活很多,它可以動態識別字段。一般不需要指定mapping都可以,因為es會自動根據數據格式識別它的類型,如果你需要對某些字段添加特殊屬性(如:定義使用其它分詞器、是否分詞、是否存儲等),就必須手動添加mapping。

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html

  查詢索引庫的mapping信息:

[hadoop@masternode elasticsearch-2.4.0]$ curl -XGET http://masternode:9200/zimo/_mapping?pretty
{
  "zimo" : {
    "mappings" : {
      "user" : {
        "properties" : {
          "age" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          }
        }
      }
    }
  }
}

  操作不存在的索引(創建):

[hadoop@masternode elasticsearch-2.4.0]$ curl -XPUT http://masternode:9200/zimo4 -d{"mapping":{"user":{"properties":{"name":{"type":"string","analyzer":"ik_max_word"}}}}}
{"acknowledged":true}

  操作已存在的索引(修改):

curl -XPOST http://masternode:9200/zimo4/user/_mapping -d‘{"properties":{"name":{"type":"string","analyzer":"ik_max_word"}}}‘

  更新或者修改已存在mapping遇到的問題

http://stackoverflow.com/questions/38179683/how-to-update-the-mapping-in-elasticsearch-to-change-the-field-datatype-and-chan

以上就是博主為大家介紹的這一板塊的主要內容,這都是博主自己的學習過程,希望能給大家帶來一定的指導作用,有用的還望大家點個支持,如果對你沒用也望包涵,有錯誤煩請指出。如有期待可關註博主以第一時間獲取更新哦,謝謝!

ElasticSearch 全文檢索— ElasticSearch 核心概念