1.rest基本介紹
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)滿城,10多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
REST全稱Representational State Transfer。是一種軟件的架構(gòu)風格,而不是標準,只是提供了一組設(shè)計原則和約束條件。它主要用于客戶端和服務(wù)器交互類的軟件?;谶@個風格設(shè)計的軟件可以更簡潔,更有層次,更易于實現(xiàn)緩存等機制。其實說白了就是類似HTTP的訪問,和HTTP非常的相似。
rest相關(guān)操作有:
-GET:獲取對象的當前狀態(tài);
-PUT:改變對象的狀態(tài);
-POST:創(chuàng)建對象;
-DELETE:刪除對象;
-HEAD:獲取頭信息;
例:
資源 | 一組資源的URI,比如:http://zzy.com/res/ | 單個資源的URI,比如:http://z.com/res/123 |
GET | 列出URI,以及該資源組中每個資源的詳細信息 | 獲取指定資源的詳細信息,格式可以自選一個合適的網(wǎng)絡(luò)資源媒體類型(json、xml) |
PUT | 使用給定的一組資源替換當前整組資源 | 替換/創(chuàng)建指定資源,并將其追加到相應(yīng)的資源中 |
POST | 在本組資源中創(chuàng)建/追加一個新的資源,該操作往往返回一個新的URL | 把指定的資源當做一個資源組,并在其下創(chuàng)建/追加一個新的元素,使其隸屬于當前資源 |
DELETE | 刪除整組資源 | 刪除指定的元素 |
ES中內(nèi)置的rest接口:
URL | 描述 |
/index/_search | 搜索指定索引下的數(shù)據(jù) |
/_aliases | 獲取或操作索引的別名 |
/index/ | 查看指定索引的詳細信息 |
/index/type/ | 創(chuàng)建或操作類型 |
/index/_mapping | 創(chuàng)建或操作mapping |
/index/_setting | 創(chuàng)建或操作設(shè)置(number_of_shards) |
/index/_open | 打開指定被關(guān)閉的索引 |
/index/_close | 關(guān)閉指定索引 |
/index/_refresh | 刷新索引(使新加內(nèi)容對搜索可見,不保證數(shù)據(jù)被寫入磁盤) |
/index/flush | 刷新索引(會觸發(fā)Lucene提交) |
2.使用CURL去操作ES
url是利用URL語法在命令行方式下工作的開源文件傳輸工具,使用curl可以簡單實現(xiàn)常見的get/post請求。簡單的認為是可以在命令行下面訪問url的一個工具。在centos的默認庫里面是有curl工具的,如果沒有請yum安裝即可。
curl的基本操作:
? -x指定http的請求方法 有HEAD GET POST PUT DELETE
? -d指定要傳輸?shù)臄?shù)據(jù)
? -H指定http請求頭信息
(1)創(chuàng)建索引庫
語法:curl -XPUT :9200/index_name/">http://<ip>:9200/index_name/
例:curl -XPUT 'http://test:9200/zzy'
(2)創(chuàng)建索引
curl -H "Content-Type: application/json" -XPOST 'http://test:9200/zzy/info/1' -d ' {"name":"hadoop", "author":"Doug Cutting", "core":["hdfs","mr","yarn"], "last_version":3.0 }'
在這里對初學者小編需要補充幾點:
PUT和POST的區(qū)別:
PUT是冪等方法,POST不是。所以PUT用戶更新,POST用于新增比較合適。創(chuàng)建操作可以使用POST,也可以使用PUT,區(qū)別就在于POST是作用在一個集合資源(/articles)之上的,而PUT操作是作用在一個具體資源之上的(/articles/123),比如說很多資源使用數(shù)據(jù)庫自增主鍵作為標識信息,這個時候就需要使用PUT了。而創(chuàng)建的資源的標識信息到底是什么,只能由服務(wù)端提供時,這個時候就必須使用POST。
ES創(chuàng)建索引庫和索引的注意點:
* 索引庫名稱必須要全部小寫,不能以下劃線開頭,也不能包含逗號。
* 如果沒有明確指定索引數(shù)據(jù)的ID,那么es會自動生成一個隨機的ID,需要使用POST參數(shù)。
例:(不指定id)
curl -H "Content-Type: application/json" -XPOST 'http://test:9200/zzy/info/' -d ' {"author" : "Doug Cutting"}'
例:(創(chuàng)建全新的數(shù)據(jù))
curl -H "Content-Type: application/json" -XPOST 'http://test:9200/zzy/info/2?op_type=create' -d ' {"name" : "hbase"}'
(3)查詢操作
例1(查詢所有):
curl -XGET //注意?pretty表示讓出現(xiàn)的json好看一些
例2:(檢索文檔中的一部分,顯示特定的字段內(nèi)容)
curl -XGET 'http://test:9200/zzy/info/1?_source=name,author&pretty'
例3:(根據(jù)條件查詢)
curl -XGET 'http://test:9200/zzy/info/_search?q=name=hadoop&pretty'
(4)更新操作
ES可以使用PUT/GET對文檔進行更新,如果指定ID的文檔已經(jīng)存在,則執(zhí)行更新操作。
ES在執(zhí)行更新操作的時候,首先將舊的文檔標記為刪除狀態(tài),然后添加新的文檔,舊的文檔不會立即消失,但是也無法訪問,ES會繼續(xù)添加更多數(shù)據(jù)的時候在后臺清理已經(jīng)標記刪除狀態(tài)的文檔。
例:(局部更新)
curl -H "Content-Type: application/json" -XPOST http://test:9200/zzy/info/1/_update -d '{ "doc":{"name" : "apache-hadoop"} }' //注意:"doc":{"name" : "apache-hadoop"}可以執(zhí)行更新,也可以執(zhí)行插入。
(5)刪除操作
例:(普通刪除,根據(jù)id刪除)
curl -XDELETE http://test:9200/zzy/info/2/
注意:
如果文檔存在,es屬性found:true,successful:1,_version屬性的值+1。
如果文檔不存在,es屬性found為false,但是版本值version依然會+1,這個就是內(nèi)部管理的一部分,有點像svn版本號,它保證了我們在多個節(jié)點間的不同操作的順序被正確標記了。
一個文檔被刪除之后,不會立即生效,他只是被標記為已刪除。ES將會在你之后添加更多索引的時候才會在后臺進行刪除。
(6)bulk操作
例:
curl -H "Content-Type: application/json" -XPOST 'http://test:9200/bank/accout/_bulk?pretty' --data-binary "@account.json"
Bulk會把將要處理的數(shù)據(jù)載入內(nèi)存中,所以一次批處理的數(shù)據(jù)量是有限的,一般建議是1000~5000個文檔,如果你的文檔很大,可以適當減少隊列,大小建議是5~15MB,默認不能超過100M,可以在es的配置文件中修改這個值:http.max_content_length:100mb
3.ES的版本控制
(1)普通數(shù)據(jù)庫和ES的控制數(shù)據(jù)讀取的策略:
普通的關(guān)系型數(shù)據(jù)庫使用的時候是當我們讀取一個數(shù)據(jù)前先鎖定這一行,然后確保只有讀到數(shù)據(jù)的這個線程可以修改這一行。而ES使用的是(樂觀并發(fā)控制),ES不會阻止某一個數(shù)據(jù)的訪問,如果基礎(chǔ)數(shù)據(jù)在我們讀取和寫入的間隔中發(fā)生了變化,更新就會失敗,這時候由程序來決定如何處理這個沖突,可以是重新讀取更新后的數(shù)據(jù),也可能將這個失敗情況直接反饋給用戶。
(2)ES實現(xiàn)版本控制:
//首先得到需要修改的文檔,獲取版本號 curl -XGET http://test:9200/zzy/info/1?pretty
//然后在執(zhí)行更新操作的時候把版本傳過去 curl -H "Content-Type: application/json" -XPUT http://test:9200/zzy/info/1?version=2 -d '{ "name":"hadoop","version":4}' //注意這是個覆蓋操作
注意:如果傳遞的版本號和待更新的文檔的版本號不一致,則會更新失敗
(3)ES外部版本:
如果數(shù)據(jù)庫已經(jīng)存在了版本號,或者是可以代表版本的時間戳,這時就可以在ES的查詢url后面添加version_type=external來使用這個號。版本號碼必須要是大于0小于9223372036854775807(Java中l(wèi)ong的最大正值)的整數(shù)。并且es在處理外部版本號的時候,它不再檢查_version是否與請求中指定的數(shù)值是否相等,而是檢查當前的_version是否比指定的數(shù)值小,如果小,則請求成功。
例:
curl -H "Content-Type: application/json" -XPUT 'http://test:9200/zzy/info/3?version=10&version_type=external' -d ' {"name": "flink"}'
文章題目:ElasticSearch的基本使用
文章網(wǎng)址:http://bm7419.com/article26/igiscg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、、虛擬主機、網(wǎng)頁設(shè)計公司、定制網(wǎng)站、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)