ElasticSearch之CURL操作

来源:https://www.cnblogs.com/halberts/archive/2018/05/11/9026318.html
-Advertisement-
Play Games

CURL的操作 curl是利用URL語法在命令行方式下工作的開源文件傳輸工具,使用curl可以簡單實現常見的get/post請求。簡單的認為是可以在命令行下麵訪問url的一個工具。在centos的預設庫裡面是有curl工具的,如果沒有請yum安裝即可。 curl -X 指定http的請求方法 有HE ...


CURL的操作 
   curl是利用URL語法在命令行方式下工作的開源文件傳輸工具,使用curl可以簡單實現常見的get/post請求。簡單的認為是可以在命令行下麵訪問url的一個工具。在centos的預設庫裡面是有curl工具的,如果沒有請yum安裝即可。 
    curl 
    -X 指定http的請求方法 有HEAD GET POST PUT DELETE 
    -d 指定要傳輸的數據 
    -H 指定http請求頭信息 
    瀏覽ES伺服器 
        curl -XGET http://master:9200  <=> 在瀏覽器中訪問 
    創建索引庫 
        curl -XPUT http://master:9200/bigdata_p 
        這樣就在es中創建了一個索引庫bigdata_p 
     
    POST和PUT都可以用於創建,二者之間的區別: 
        PUT是冪等方法,POST不是。所以PUT用戶更新,POST用於新增比較合適。 
        ES創建索引庫和索引時的註意點 
              1)索引庫名稱必須要全部小寫,不能以下劃線開頭,也不能包含逗號 
              2)如果沒有明確指定索引數據的ID,那麼es會自動生成一個隨機的ID,需要使用POST參數 
            curl -XPOST http://localhost:9200/bigdata/product/ -d '{"author" : "Doug Cutting"}' 
    往索引庫中新增數據 
        在具體的type裡面,添加相關的document 
        curl -XPUT http://master:9200/bigdata_p/product/ -d '{"name":"hadoop", "author": "Doug Cutting", "c_version": "2.7.3"}' 
    查詢某一個索引庫中的數據 
            查詢整個索引庫:curl -XGET http://master:9200/bigdata_p/_search?pretty 
                    在url後面加上一個pretty則會對返回結果進行格式化, 
            查詢某一個type:curl -XGET http://master:9200/bigdata_p/product/_search?pretty 
            查詢具體的一條記錄:curl -XGET http://master:9200/bigdata_p/product/1?pretty 
        查詢一條索引文檔中的具體的欄位:curl -XGET http://master:9200/bigdata_p/product/1?_source=name&pretty 
            如果要查詢多個欄位,使用","進行隔開。eg. 
            curl -XGET http://master:9200/bigdata_p/product/1?_source=name,author&pretty 
        獲取source所有數據 
            curl -XGET http://master:9200/bigdata_p/product/1?_source&pretty 
        根據條件進行查詢 
            curl -XGET http://master:9200/bigdata_p/product/_search?q=name:hbase,hive&pretty 
    -------------------         
    ES更新 
       ES可以使用PUT或者POST對文檔進行更新,如果指定ID的文檔已經存在,則執行更新操作 
    註意:執行更新操作的時候,ES首先將舊的文檔標記為刪除狀態,然後添加新的文檔,舊的文 
    檔不會立即消失,但是你也無法訪問,ES會繼續添加更多數據的時候在後臺清理已經標記為刪 
    除狀態的文檔。 
    局部更新 
       可以添加新欄位或者更新已經存在欄位(必須使用POST) 
        curl -XPOST http://master:9200/bigdata_p/product/2/_update -d '{"doc":{"c_version": "2.0.0", "publish_time": "2017-03-23"}}' 
        查詢結果: 
        "hits" : [ { 
              "_index" : "bigdata_p", 
              "_type" : "product", 
              "_id" : "2", 
              "_score" : 0.30685282, 
              "_source" : { 
                "name" : "hbase", 
                "author" : "apache", 
                "c_version" : "2.0.0", 
                "publish_time" : "2017-03-23" 
              } 
            } ] 
    普通刪除,根據主鍵刪除 
       curl -XDELETE http://master:9200/bigdata_p/product/3/ 
    說明:如果文檔存在,es屬性found:true,successful:1,_version屬性的值+1。 
       如果文檔不存在,es屬性found為false,但是版本值version依然會+1,這個就是內部 
    管理的一部分,有點像svn版本號,它保證了我們在多個節點間的不同操作的順序被正確標記了。 
       註意:一個文檔被刪除之後,不會立即生效,他只是被標記為已刪除。ES將會在你之後添加 
    更多索引的時候才會在後臺進行刪除。 
     
    批量操作-bulk 
       Bulk api可以幫助我們同時執行多個請求 
    格式: 
       action:[index|create|update|delete] 
       metadata:_index,_type,_id 
       request body:_source(刪除操作不需要) 
       {action:{metadata}}\n 
       {request body}\n 
       {action:{metadata}}\n 
       {request body}\n 
      create和index的區別 
        如果數據存在,使用create操作失敗,會提示文檔已經存在,使用index則可以成功執行。 
         
        使用文件的方式 
            curl -XPOST/PUT http://master:9200/index/type/_bulk --data-binary @path 
            比如     
            curl -XPOST 'http://master:9200/bank/account/_bulk --data-binary @/home/uplooking/Documents/accounts.json 
        查詢結果: 
            http://master:9200/bank/_search?pretty 
            { 
              "took" : 10,    ---->預設取出其中前10條記錄 
              "timed_out" : false, 
              "_shards" : { 
                "total" : 5, 
                "successful" : 5, 
                "failed" : 0 
              }, 
              "hits" : { 
                "total" : 1000, ----->總共有1000條記錄 
                "max_score" : 1.0, 
    可以查看一下各個索引庫信息 

    curl 'http://localhost:9200/_cat/indices?v'

 

 

 

簡介:

Curl工具是一種可以在命令行訪問url的工具,支持get和post請求方式。-X指定http請求的方法,-d指定要傳輸的數據。

創建索引:

Put創建

curl -XPUThttp://localhost:9200/shb01/student/1-d'{"name":"jack","age":30,"info":"Ilove you"}'

{"_index":"shb01","_type":"student","_id":"1","_version":1,"created":true}Youhave new mail in /var/spool/mail/root

 

執行put後有返回值

_index索引名稱

_type類型名

_version版本號

created:true表示是新創建的。

上面的命令每執行一次version就會加1,-XPUT必須制定id。

 

Post創建索引

curl -XPOSThttp://localhost:9200/shb01/student -d'{"name":"tom","age":21,"info":"tom"}'

{"_index":"shb01","_type":"student","_id":"AVadzuNgxskBS1Rg2tdp","_version":1,"created":true}

使用post創建索引數據,-XPOST可以指定id,此時如果存在相同數據則是修改,不指定id的話會隨機生成id,且每次執行都會生成新數據。

 

如果需要每次執行都產生新的數據可以使用post命令且不指定id。

如果使用put命令則需要增加create,命令格式如下

curl -XPUT http://localhost:9200/shb01/student/1/_create-d '{"name":"jackk","age":31}'

curl -XPUThttp://localhost:9200/shb01/student/1?op_type=create -d'{"name":"jackk","age":31}'

以上兩條命令執行時如果存在id相同的數據則會給出error信息

{"error":"DocumentAlreadyExistsException[[shb01][2][student][1]: document already exists]","status":409}

 

Post與put的區別

Put是等冪操作,即無論執行多少次結果都一樣,例如DEL無論刪除多少次索引庫中的結果都一樣,put只要指定了id且數據不變無論執行多少次索引庫中的數據都不變,只有version會變化。

Post每次執行都會產生新數據。

查詢

1:查詢索引庫shb01中的類型student

瀏覽器:http://192.168.79.131:9200/shb01/student/_search?pretty

 

Curl:curl -XGET http://192.168.79.131:9200/shb01/student/_search?pretty

其顯示結果與瀏覽器一樣。

 

2:查詢文檔1中的數據

http://192.168.79.131:9200/shb01/student/1?pretty

http://192.168.79.131:9200/shb01/student/1?_source&pretty

兩者結果一樣

http://192.168.79.131:9200/shb01/student/1?_source=name&pretty

可以通過source指定顯示那些欄位

 

3:查詢所有索引庫信息

瀏覽器:http://192.168.79.131:9200/_search?pretty

 

將索引庫shb01和shb02的數據都顯示出來。

 

4:根據條件查詢

瀏覽器:http://192.168.79.131:9200/shb01/student/_search?q=name:zs&pretty

查詢name為zs的數據

 

 

5:查詢集群狀態

 

Curl –XGET http://192.168.79.131:9200/_cluster/health?pretty

http://192.168.79.131:9200/_cluster/health?pretty

 

6:多索引,多類型查詢,分頁查詢,超時

 

Curl:curl -XGET http://192.168.79.131:9200/shb01,shb02/stu,tea/_search?pretty

curl -XGET http://192.168.79.131:9200/_all/stu,tea/_search?pretty

瀏覽器去掉curl –XGET即可

分頁

curl -XGET http://192.168.79.131:9200/shb01/stu/_search?size=2&from=0

超時

     curl -XPOST http://192.168.79.131:9200/_search?_timeout=100

 

 

更新

Es

部分更新

如果文檔1的欄位很多而我們只需要更新其中的一兩個欄位則可以通過doc指定需要修改的欄位其他欄位則不必修改。

crul –XPUT

http:192.168.79.131:9200/shb01/student/1/_update?version=1

 –d ‘{“doc”:{“name”:”updatename”}’

 

全量更新:

    更新文檔1中所有欄位的內容。

curl -XPUThttp://192.168.79.131:9200/shb01/student/1 -d'{"name":"will","age":100,"info":"newonw"}'

 

更新流程

es會將舊的文檔進行標記然後再添加新數據,舊的文檔也不能再被訪問,在後續添加數據時es會清理已經為刪除狀態的數據。

刪除

刪除文檔並不會立即生效,只會將其標記為已刪除,當後續添加更多索引時才會在後臺刪除。

curl -XDELETE http://192.168.79.131:9200/shb01/student/AVad05EExskBS1Rg2tdq

根據id刪除,刪除成功返回found:true,找不到found:false,版本號都會加1。

 

 

根據條件刪除,刪除索引shb01,shb02種類型student,tea中所有name為zs的文檔

curl -XDELETEhttp://192.168.79.131:9200/shb01,shb02/student,tea/_query?q=name:zs

 

刪除所有的索引庫中名稱為tom的文檔

curl -XDELETE http://192.168.79.131:9200/_all/_query?q=name:tom

 

批處理

將一批數據載入入記憶體然後和es交互一次,一次性同時處理多個請求和redis的管道類似。

格式:

Action:index/create/delete/update

Metadata:_index/_type/_id

Create:如果數據存在則報錯;index:如果數據存在仍會執行成功。

步驟:

1:在liunx下創建一個文件request1,vi request1

    {"index":{"_index":"shb01","_type":"student","_id":"1"}}

{"name":"st01","age":"10","info":"st01"}

{"create":{"_index":"shb100","_type":"student","_id":"2"}}

{"name":"tea01","age":"10","info":"tea01"}

{"delete":{"_index":"shb01","_type":"student","_id":"AVadzuNgxskBS1Rg2tdp"}

{"update":{"_index":"shb02","_type":"tea","_id":"1"}}

{"doc":{"name":"zszszszs"}}

 

文件中

index表示操作類型

_index指定索引庫,_type指定類型,_id指定操作文檔

 

 

2:執行批處理命令,關鍵字_bulk

curl  -XPUThttp://192.168.79.131:9200/_bulk --data-binary @/usr/local/request1

註意:--data-binary@之間有空格隔開,我在實驗中沒有空格一直提示操作參數不對。

 

3:返回值

{

"took":957,"errors":false,"items":[

{"index":{"_index":"shb01","_type":"student","_id":"1","_version":12,"status":200}},

{"create":{"_index":"shb100","_type":"student","_id":"2","_version":1,"status":201}},

{"delete":{"_index":"shb01","_type":"student","_id":"AVadzuNgxskBS1Rg2tdp","_version":2,"status":200,"found":true}},

{"update":{"_index":"shb02","_type":"tea","_id":"1","_version":2,"status":200}}

]

 

返回信息中errors表示批處理有沒有錯誤,註意version和status,其中shb100為新創建的索引庫

下麵是我第二次執行request1文件的返回信息,errors為true,表示批處理中有操作執行失敗,可以看到create因為庫中已有id相同的文檔所以報錯。但是雖然存在錯誤操作但其他的操作依然成功執行。這點和redis中的事務操作類似。

{

"took":22,"errors":true,"items":[

{"index":{"_index":"shb01","_type":"student","_id":"1","_version":13,"status":200}},

{"create":{"_index":"shb100","_type":"student","_id":"2","status":409,"error":"DocumentAlreadyExistsException[[shb100][3][student][2]: document already exists]"}},

{"delete":{"_index":"shb01","_type":"student","_id":"AVadzuNgxskBS1Rg2tdp","_version":1,"status":404,"found":false}},

{"update":{"_index":"shb02","_type":"tea","_id":"1","_version":3,"status":200}}

]

}

 

4:在命令中指定索引庫和類型

創建一個文件,文件中沒有配置索引庫和類型

{"index":{"_id":"1"}}

{"name":"st1_1","age":"10","info":"st1_1"}

{"create":{"_id":"200"}}

{"name":"st200","age":"10","info":"st200"}

 

執行如下命令,在命令中指定了索引庫和類型

curl  -XPUThttp://192.168.79.131:9200/shb01/student/_bulk --data-binary@/usr/local/request2

 

返回信息

{

"took":24,"errors":false,"items":[

{"index":{"_index":"shb01","_type":"student","_id":"1","_version":17,"status":200}},

{"create":{"_index":"shb01","_type":"student","_id":"200","_version":1,"status":201}}

]

}

 

5:也可以使用-XPOST替換-XPUT


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 預設在CentOS-Minimal版本下沒有安裝telnet和xinetd服務。 1、安裝telnet [root@localhost ~]# rpm -qa | grep telnet --檢查是否安裝telnet,沒有文件表示未安裝 [root@localhost ~]# yum -y inst ...
  • [root@MyCentos7 var]# docker pull javaUsing default tag: latestTrying to pull repository docker.io/library/java ... latest: Pulling from docker.io/lib ...
  • Linux系統初學-第三課 Linux網路配置 1.動態IP配置 配置文件路徑 /etc/sysconfig/network-scripts/ ls查看網卡eth0,其中HWADDR值得獲取:ifconfig eht0 | grep HWaddr,保存之後,service network resta ...
  • ind是我們很常用的一個Linux命令,但是我們一般查找出來的並不僅僅是看看而已,還會有進一步的操作,這個時候exec的作用就顯現出來了。 exec解釋:-exec 參數後面跟的是command命令,它的終止是以;為結束標誌的,所以這句命令後面的分號是不可缺少的,考慮到各個系統中分號會有不同的意義, ...
  • 1、pipe 本質: 匿名管道 內核緩衝區 偽文件(偽文件和操作文件類似) 創建方式: fd[0] 表示讀端 fd[1] 表示寫端 返回值: 成功返回0,失敗返回-1 特點: 有讀端和寫端,對應兩個文件描述符,數據從寫端流入,讀端流出 操作管道的進程掛掉後管道自動釋放 管道預設是阻塞的 管道原理: ...
  • 效果圖: 1.增加命令提示符 2.增加PowerShell 以上內容保存為綴名為OpenCmdHere.reg,雙擊OpenCmdHere.reg文件運行,彈出的提示點確認,修改註冊表就大功告成了! 下載鏈接:https://files.cnblogs.com/files/dyj057/opencm ...
  • 一、樹形結構例子分析: 以360問答頁面為例:http://wenda.so.com/c/ 我們通過觀察URL,可以明確該頁面的數據以樹形結構存儲,下麵三塊模塊分別為: ①根節點 ②根節點的第一層子節點 ③為左側所選擇節點的下一層子節點 (圖1) 該例簡化的樹形結構圖如下: (圖2) 我們不難發現, ...
  • 一 、介紹 二 、多表連接查詢 三 、符合條件連接查詢 四 、子查詢 一、介紹 本節主題 多表連接查詢 複合條件連接查詢 子查詢 準備表 #建表 create table dep( id int, name varchar(20) ); create table emp( id int primar ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...