1. 程式人生 > >ElasticSearch 命令-(基礎篇)

ElasticSearch 命令-(基礎篇)

ElasticSearch的命令呼叫是基於http的,提供了豐富的RESTFul API,從功能上來分可以分為4類:

(1)檢查叢集、節點、索引等狀態資訊;
(2)
管理叢集、節點、索引資料及元資料;關。
(3)
執行CRUD操作及搜尋操作;
(4)
執行高階搜尋操作,例如pagingfilteringscriptingfacetingaggregations及其它操作;

叢集、節點、索引等狀態資訊的檢視命令:

檢視健康情況 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個分片(PR各一片有介紹)都儲存成功。

檢視這條記錄的命令:

curl -XGET 'localhost:9200/customer/external/1?pretty'

PS0:插入文件時型別不可省略,必須指定。

PS1:索引的建立可以是隱式的,例如在執行建立文件這一條命令時ES會自動建立索引

PS2ID部分是可選的,如果不指定,

Elasticsearch將產生一個唯一的ID來索引這個文件。從ES設計來講,我們更關心的是對文件內容的索引,而不去關心ID是多少,所以實際應用中可以將ID交給ES維護。

修改記錄:

curl -XPUT 'localhost:9200/customer/ car /1?pretty' -d '
        {
          "name": "YeJingtao-V2"
        }'

PUTPOST效果一樣,PUT是冪等的)

刪除記錄:

curl -XDELETE 'localhost:9200/customer/external/1?pretty'

刪除索引:

curl -XDELETE 'localhost:9200/customer'

索引刪除時,索引內的型別和記錄全部清除。

Bulk批量操作:

除開上面介紹的單個操作外,ES還供了一個叫bulkAPI可以進行批量操作,進行大批量文件和索引的更新或刪除操作,極大的提升了操作效率。

API命令格式是ip:port/index/type/_bulk–data-binary @jsonfile

Jsonfile也有格式要求,必須是一行描述資訊一行文件資訊

描述資訊:{"index":{"_index":"stuff_orders","_type":"order_list","_id":903713}}

其中indextype不是必須的,與上面API命令中的indextype相呼應,二者選擇填其一,如果都存在以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:搜尋studentsmy_index索引的所有型別;

/ my_*/_search:搜尋名稱以my_開頭的所有索引的所有型別;

/ my_index/customer/_search:搜尋my_index索引的customer型別;

/_all/customer/_search:搜尋所有索引的customer型別

PS:一旦你取回了你的搜尋結果,Elasticsearch就完成了使命,它不會維護任何伺服器端的資源或者在你的結果中開啟遊標,這也是RESTFul風格的一個特性,也註定了ES每次返回值預設是有限制的。

由於REST request bodyJSON格式從可讀性和靈活性來說都給開發者帶來太多的美感,所以實際應用中重點使用JSON格式,這種查詢語句又被稱為DSL。而DSL又因原理不同被劃分為查詢DSL(query DSL)和過濾DSL(filter DSL)

DSL格式如果再使用linuxcurl命令來書寫那真是太累了,這裡我們使用ELK組合中的Kibana來幫助我們查詢ES

按照官網山教程

1下載解壓,2配置config/kibana.yml3執行bin/kibana4瀏覽器訪問http://localhost:5601

萬事俱備,下一篇開始啃queryfilter、聚合三種具體搜尋命令。