elasticsearch讀寫文檔概述
data replication model定義 (該model基于primary-backup model )
ES的每個index
都被分成多個shards
每個shard
可能含有多個copies
(備份) 這些copies
被稱為一個 replication group
當文件發(fā)生增加或刪除操作時,replication group
必須同步保存,否則再讀取不同的copies是會得到不同的結果.
**primary-backup model定義 **
這個模式下,將replication group中的一個單獨的copy當做primary shard
.其他copies 被稱為replica shards
;primary shard
是所有索引操作的主記錄點. primary shard
負責驗證操作的有效性和正確性.一旦一個操作在primary shard
上生效了,那么這個primary shard
就要負責將這個有效的操作復制到其他replica shards
上.
Basic write model
Elasticsearch中的每個索引操作首先基于document ID
通過routing定位到replication group
.一旦replication group
被確定,這個操作就會發(fā)送到這個group的primary shard
.而primary shard
負責驗證這個操作并將其傳送給其他replicas
.由于replicas
可能不在線, primary
不一定要傳送給所有的replicas
. 而是由Elasticsearch
維護一個需要接受這個操作的shard copies
清單. 這個清單被稱為in-sync copies
并且由master node
維護.
primary shard
遵循如下流程:
- 驗證操作,如果操作無效則拒絕
- 執(zhí)行該操作. 這步中胡對
field
的內(nèi)容進行驗證,并在條件不滿足時拒絕該操作(Example: a keyword value is too long for indexing in Lucene). - 發(fā)送該操作到當前
in-sync copies set
的每個replica.如果存在多個 replicas,會平行進行. - 一旦所有
replicas
都成功執(zhí)行了該操作并響應給了primary,primary
會通知client
這個請求成功了.
操作失敗處理
case1: 如果primary
無法處理這個操作,那么擁有該primary的節(jié)點會給master發(fā)送消息,這個索引操作會等待一段時間默認一分鐘,以便master去任命一個replica成為新的primary.然后這個操作會有新的primary來處理.(這種情況主要發(fā)生在擁有primary的節(jié)點與集群因為網(wǎng)絡原因而孤立的情況下)
case2: 如果primary
成功的處理了index操作,in-sync replica set
中的一個replica
沒有成功接收改操作. 那么primary會給master發(fā)送一個消息,請求將有問題的replica從in-sync replica set
中刪除.
elasticsearch中常用的API分類如下:
-
文檔API
: 提供對文檔的增刪改查操作 -
搜索API
: 提供對文檔進行某個字段的查詢 -
索引API
: 提供對索引進行操作聚至,查看索引信息等 -
查看API
: 按照更直觀的形式返回數(shù)據(jù),更適用于控制臺請求展示
文檔類API
Index API
通過index API 可以添加獲更新某種類型的JSON文檔到特定的index ,并使之可搜索. 例如在 "twitter" index, type "tweet" , id =1 下新增一個JSON文檔
PUT twitter/tweet/1
{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elasticsearch"
}
以上操作的結果為:
{
"_shards" : {
"total" : 2,
"failed" : 0,
"successful" : 2
},
"_index" : "twitter",
"_type" : "tweet",
"_id" : "1",
"_version" : 1,
"created" : true,
"result" : created
}
_shards
展示有關索引操作的replication process
信息.
total
表示shard copies
(primary and replica shards)的數(shù)量
successful
表示執(zhí)行該操作成功的shard數(shù)量
failed
一個包含replication
相關錯誤的數(shù)組
successful
至少1才能任務改index操作是成功了的.
注意:當一個 index 操作成功返回時,并不是所有replica shard都開始了該操作,(默認情況下只有primary是必須的,但是這個可以設置)也就是說,total 會等于 設置的number_of_replicas
值,successful 會等于開始該操作的shards數(shù).
當一個index不存在的時候,默認自動創(chuàng)建相應的index和type 相應的mapping也會自動添加到特定type的mapping definition下.
如果不想自動添加則進行如下設置:
取消自動創(chuàng)建index: setting action.auto_create_index to false
取消自動創(chuàng)建mapping: setting index.mapper.dynamic to false
自動創(chuàng)建index還可以自定義配置,如:
action.auto_create_index to +aaa*,-bbb*,+ccc*,-*
(+ 表示允許創(chuàng)建, - 表示不允許).