ElasticSearch 命令-(基礎篇)
ElasticSearch的命令呼叫是基於http的,提供了豐富的RESTFul API,從功能上來分可以分為4類:
(1)檢查叢集、節點、索引等狀態資訊;
(2) 管理叢集、節點、索引資料及元資料;關。
(3) 執行CRUD操作及搜尋操作;
(4) 執行高階搜尋操作,例如paging、filtering、scripting、faceting、aggregations及其它操作;
叢集、節點、索引等狀態資訊的檢視命令:
檢視健康情況 curl‘localhost:9200/_cat/health?v’
顏色代表狀態:紅黃綠;Node是節點個數;Shards是分片個數;Pri是分片中主分片的個數
檢視索引 curl ‘localhost:9200/_cat/indices?v’
檢視結點 curl ‘localhost:9200/_cat/nodes?v’
小結:此類命令都是GET請求’ip:port/_cat/XXX?v’
增刪改查命令:
命令遵循的格式:
curl-X<REST Verb><Node>:<Port>/<Index>/<Type>/<ID>
新增修改是PUT請求,刪除是DELETE請求,查詢是GET
建立索引:(pretty非必要,為了使返回資訊更美麗)
curl -XPUT 'localhost:9200/customer?pretty'
插入文件:
curl -XPUT 'localhost:9200/customer/car/1?pretty' -d '
{
"name": "YeJingtao"
}'
結果是:
Created表示插入成功,Shards表示有2個分片(P、R各一片有介紹)都儲存成功。
檢視這條記錄的命令:
curl -XGET 'localhost:9200/customer/external/1?pretty'
PS0:插入文件時型別不可省略,必須指定。
PS1:索引的建立可以是隱式的,例如在執行建立文件這一條命令時ES會自動建立索引
PS2:ID部分是可選的,如果不指定,
修改記錄:
curl -XPUT 'localhost:9200/customer/ car /1?pretty' -d '
{
"name": "YeJingtao-V2"
}'
(PUT、POST效果一樣,PUT是冪等的)
刪除記錄:
curl -XDELETE 'localhost:9200/customer/external/1?pretty'
刪除索引:
curl -XDELETE 'localhost:9200/customer'
索引刪除時,索引內的型別和記錄全部清除。
Bulk批量操作:
除開上面介紹的單個操作外,ES還供了一個叫bulk的API可以進行批量操作,進行大批量文件和索引的更新或刪除操作,極大的提升了操作效率。
API命令格式是ip:port/index/type/_bulk–data-binary @jsonfile
Jsonfile也有格式要求,必須是一行描述資訊一行文件資訊
描述資訊:{"index":{"_index":"stuff_orders","_type":"order_list","_id":903713}}
其中index和type不是必須的,與上面API命令中的index和type相呼應,二者選擇填其一,如果都存在以json檔案中的為準。
文件資訊只要是標準的json格式就好,沒有內容要求,例如
{"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880HolmesLane","employer":"Pyrami","email":"[email protected]","city":"Brogan","state":"IL"}
文件樣例:(https://github.com/yejingtao/forblog/tree/master/elasticsearch)
命令:curl -XPOST192.168.226.133:9200/my_index/customer/_bulk?pretty --data-binary @accounts.json
再回頭看下索引的狀態:
有了這1000條記錄,我們就可以開始ES的核心“搜尋之旅”了。
搜尋查詢分類和簡介:
從命令格式上來劃分有兩種方式:一是通過RESTfulrequest API傳遞查詢引數,也稱“query-string”;另一個是通過傳送REST request body,也稱作JSON格式。
先從直觀上感覺下兩種風格的差異,以下兩條命令是等價的。
風格1:
curl -XGET ‘192.168.226.133:9200/my_index/_search?pretty’
風格2:
curl - XGET 'localhost:9200/ my_index /_search?pretty' -d'
{
"query": {"match_all": {} }
}'
在搜尋時url中可以指定索引名和型別名以減少搜尋的範圍:
/_search:搜尋所有索引的所有型別;
/my_index/_search:搜尋my_index索引的所有型別;
/students, my_index /_search:搜尋students和my_index索引的所有型別;
/ my_*/_search:搜尋名稱以my_開頭的所有索引的所有型別;
/ my_index/customer/_search:搜尋my_index索引的customer型別;
/_all/customer/_search:搜尋所有索引的customer型別
PS:一旦你取回了你的搜尋結果,Elasticsearch就完成了使命,它不會維護任何伺服器端的資源或者在你的結果中開啟遊標,這也是RESTFul風格的一個特性,也註定了ES每次返回值預設是有限制的。
由於REST request body的JSON格式從可讀性和靈活性來說都給開發者帶來太多的美感,所以實際應用中重點使用JSON格式,這種查詢語句又被稱為DSL。而DSL又因原理不同被劃分為查詢DSL(query DSL)和過濾DSL(filter DSL)。
DSL格式如果再使用linux的curl命令來書寫那真是太累了,這裡我們使用ELK組合中的Kibana來幫助我們查詢ES。
按照官網山教程
1下載解壓,2配置config/kibana.yml,3執行bin/kibana,4瀏覽器訪問http://localhost:5601
萬事俱備,下一篇開始啃query、filter、聚合三種具體搜尋命令。