Elasticsearch(七):document

document

------------------------------------------------------------------------------------------------------------------------

1、document的全量替換

(1)語法與創建文檔是一樣的,如果document id不存在,那麼就是創建;如果document id已經存在,那麼就是全量替換操作,替換document的json串內容
(2)document是不可變的,如果要修改document的內容,第一種方式就是全量替換,直接對document重新建立索引,替換裏面所有的內容
(3)es會將老的document標記爲deleted,然後新增我們給定的一個document,當我們創建越來越多的document的時候,es會在適當的時機在後臺自動刪除標記爲deleted的document

------------------------------------------------------------------------------------------------------------------------

2、document的強制創建

(1)創建文檔與全量替換的語法是一樣的,有時我們只是想新建文檔,不想替換文檔,如果強制進行創建呢?
(2)PUT /index/type/id?op_type=create,PUT /index/type/id/_create

------------------------------------------------------------------------------------------------------------------------

3、document的刪除

(1)DELETE /index/type/id
(2)不會理解物理刪除,只會將其標記爲deleted,當數據越來越多的時候,在後臺自動刪除
 

路由:

(1)document路由到shard上是什麼意思?

(2)路由算法:shard = hash(routing) % number_of_primary_shards

舉個例子,一個index有3個primary shard,P0,P1,P2

每次增刪改查一個document的時候,都會帶過來一個routing number,默認就是這個document的_id(可能是手動指定,也可能是自動生成)
routing = _id,假設_id=1

會將這個routing值,傳入一個hash函數中,產出一個routing值的hash值,hash(routing) = 21
然後將hash函數產出的值對這個index的primary shard的數量求餘數,21 % 3 = 0
就決定了,這個document就放在P0上。

決定一個document在哪個shard上,最重要的一個值就是routing值,默認是_id,也可以手動指定,相同的routing值,每次過來,從hash函數中,產出的hash值一定是相同的

無論hash值是幾,無論是什麼數字,對number_of_primary_shards求餘數,結果一定是在0~number_of_primary_shards-1之間這個範圍內的。0,1,2。

(3)_id or custom routing value

默認的routing就是_id
也可以在發送請求的時候,手動指定一個routing value,比如說put /index/type/id?routing=user_id

手動指定routing value是很有用的,可以保證說,某一類document一定被路由到一個shard上去,那麼在後續進行應用級別的負載均衡,以及提升批量讀取的性能的時候,是很有幫助的

(4)primary shard數量不可變的謎底

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章