ElasticSearch入門檢索
- 2021 年 8 月 9 日
- 筆記
- elasticsearch, JAVA
前面簡介說到 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官方提供了銀行測試數據
//github.com/elastic/elasticsearch/tree/master/docs/src/test/resources
POST bank/account/_bulk
導入測試數據,下面進行進階檢索