1. 程式人生 > 其它 >ElasticSearch入門檢索

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

匯入測試資料,下面進行進階檢索