本篇文章為大家展示了Elasticsearch document id 生成方式是什么,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
成都創(chuàng)新互聯(lián)公司于2013年創(chuàng)立,先為常州等服務建站,常州等地企業(yè),進行企業(yè)商務咨詢服務。為常州企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。
根據(jù)應用情況來說,是否滿足手動指定 document id 的前提:
一般來說,是從某些其他的系統(tǒng)中,導入一些數(shù)據(jù)到es時,會采取這種方式,就是使用系統(tǒng)中已有數(shù)據(jù)的唯一標識,作為es中document的id。舉個例子,比如說,我們現(xiàn)在在開發(fā)一個電商網(wǎng)站,做搜索功能,或者是OA系統(tǒng),做員工檢索功能。這個時候,數(shù)據(jù)首先會在網(wǎng)站系統(tǒng)或者IT系統(tǒng)內(nèi)部的數(shù)據(jù)庫中,會先有一份,此時就肯定會有一個數(shù)據(jù)庫的primary key(自增長,UUID,或者是業(yè)務編號)。如果將數(shù)據(jù)導入到 Elasticsearch 中,此時就比較適合采用數(shù)據(jù)在數(shù)據(jù)庫中已有的primary key。
如果說,我們是在做一個系統(tǒng),這個系統(tǒng)主要的數(shù)據(jù)存儲就是 Elasticsearch 一種,也就是說,數(shù)據(jù)產(chǎn)生出來以后,可能就沒有id,直接就放es一個存儲,那么這個時候,可能就不太適合說手動指定document id的形式了,因為你也不知道id應該是什么,此時可以采取下面要講解的讓 Elasticsearch 自動生成id的方式。
# put /index/type/id PUT /test_index/test_type/2 { "test_content": "my test" } { "_index" : "test_index", "_type" : "test_type", "_id" : "2", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 }
# post /index/type PUT test_index/test_type { "test_content": "my test automated document id" } { "error" : "Incorrect HTTP method for uri [/test_index/test_type?pretty=true] and method [PUT], allowed: [POST]", "status" : 405 } POST /test_index/test_type { "test_content": "my test" } { "_index" : "test_index", "_type" : "test_type", "_id" : "A7Ma5XYB_s8SuYmy2Xg0", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 } # post /index/type PUT test_index/test_type { "test_content": "my test automated document id" } { "error" : "Incorrect HTTP method for uri [/test_index/test_type?pretty=true] and method [PUT], allowed: [POST]", "status" : 405 } POST /test_index/test_type { "test_content": "my test" } { "_index" : "test_index", "_type" : "test_type", "_id" : "A7Ma5XYB_s8SuYmy2Xg0", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 }
有可能兩個創(chuàng)建 Document 的請求是完全在同一時間執(zhí)行的(小概率事件),只不過在不同的 Elastic 節(jié)點上,那么,如果 _id 自動生成的算法不夠好的話,有沒有可能出現(xiàn)兩個節(jié)點,給兩個不同的 Document 創(chuàng)建了相同的 _id ?
當然是不可能的。
GUID 算法可以保證在分布式的環(huán)境下,不同節(jié)點同一時間創(chuàng)建的 _id 一定是不沖突的(即使是同一個節(jié)點,也不會有任何的問題)。
Elasticsearch 自動生成 _id 的機制,可以保證不會出現(xiàn)兩個不同的 Document 的 _id 是一樣的。
注意,自動生成 ID 的時候,使用的是 POST 而不是 PUT;手動生成 ID 的時候使用 PUT 或者 POST 都可以。
另外,這一節(jié)的實際操作,我是在 cloud.elastic.co 提供的虛擬機上進行的。其實在準備認證期間,我覺得可以考慮購買兩個月左右的服務;也可以考慮在阿里云上購買。
自動生成的id,長度為20個字符,URL安全,base64編碼,GUID,分布式系統(tǒng)并行生成時不可能會發(fā)生沖突。
上述內(nèi)容就是Elasticsearch document id 生成方式是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。