ElasticSearch入門檢索
前面簡介說到 elsatic是通過RestFul API介面操作資料的,可以通過postman模擬介面請求測試一下
一、_cat
1、GET /_cat/nodes:檢視所有節點
2、GET /_cat/health:檢視 es 健康狀況
3、GET /_cat/master:檢視主節點
4、GET /_cat/indices:檢視所有索引 類似mysql中的show databases;
二、索引一個文件(儲存)
儲存一個數據,儲存在哪個索引的哪個型別下,指定用哪個唯一標識
PUT customer/external/1;在 customer 索引下的 external 型別下儲存 1 號資料
PUT 和 POST 都可以新增
POST 新增。如果不指定 id,會自動生成 id。指定 id 就會修改這個資料,並新增版本號
PUT 可以新增可以修改。PUT 必須指定 id;由於 PUT 需要指定 id,我們一般都用來做修改
操作,不指定 id 會報錯。
三、查詢文件
GET customer/external/1
查詢返回結果: { "_index": "customer", //在哪個索引 "_type": "external", //在哪個型別 "_id": "1", //記錄 id "_version": 2, //版本號 "_seq_no": 1, //併發控制欄位,每次更新就會+1,用來做樂觀鎖 "_primary_term": 1, //同上,主分片重新分配,如重啟,就會變化 "found": true, "_source": { //真正的內容 "name": "John Doe" } } 樂觀鎖更新攜帶 ?if_seq_no=0&if_primary_term=1,攜帶的資料要和查詢出來的保持一致,要不然會報錯
四、更新文件
1、POST customer/external/1/_update
{
"doc":{
"name": "Doew"
}
}
2、POST customer/external/1
{
"name": "Doe2"
}
3、PUT customer/external/1
{
"name": "Doe"
}
以上三種方式都可以進行更新資料
第一種方式POST請求帶有_update會進行對比元資料,如果與原來的資料一模一樣就什麼都不做,version、seq_no欄位都不變
第二種和第三種不會對比元資料,會直接修改 version、seq_no等欄位也會改變
結論:根據場景,對於大併發更新,不帶_update。
對於併發查詢但是偶爾更新的帶 _update;對比更新,會重新計算分配規則
更新同時增加屬性
POST customer/external/1/_update
{
"doc": {
"name": "Jane Doe",
"age": 20
}
}
PUT 和 POST 不帶_update 也可以
注意:POST帶_update ,必須帶有doc
五、刪除文件&索引
刪除文件:DELETE customer/external/1
刪除索引:DELETE customer
注意:Elastic沒有提供刪除型別的操作
六、bulk 批量操作API
這個需要用到Kibana的dev-tools測試批量
Kibana是一個開源的分析與視覺化平臺,設計出來用於和Elasticsearch一起使用的。你可以用kibana搜尋、檢視存放在Elasticsearch中的資料
1.指定索引的批量操作
POST customer/external/_bulk
{"index":{"_id":"1"}}
{"name": "XiaoMing" }
{"index":{"_id":"2"}}
{"name": "xiaoHong" }
2.不指定索引,對Elastic進行操作
POST /_bulk
{ "delete": { "_index": "website", "_type": "blog", "_id": "123" }}
{ "create": { "_index": "website", "_type": "blog", "_id": "123" }}
{ "title": "My first blog post" }
{ "index": { "_index": "website", "_type": "blog" }}
{ "title": "My second blog post" }
{ "update": { "_index": "website", "_type": "blog", "_id": "123"} }
{ "doc" : {"title" : "My updated blog post"} }
bulk API 以此按順序執行所有的 action(動作)。如果一個單個的動作因任何原因而失敗,
它將繼續處理它後面剩餘的動作。當 bulk API 返回時,它將提供每個動作的狀態(與傳送
的順序相同),所以您可以檢查是否一個指定的動作是不是失敗了。
3.樣本測試資料
Elastic官方提供了銀行測試資料
https://github.com/elastic/elasticsearch/tree/master/docs/src/test/resources
POST bank/account/_bulk
匯入測試資料,下面進行進階檢索