ElasticSearch 全文檢索— ElasticSearch 核心概念
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 核心概念