編程界的小學生
一、簡介
Java是面向對象的,都是Java類。Mysql是面向數據行的,一行一行的。而我們的Elasticsearch是面向document的(文檔,理解成json格式就行)。
二、集羣管理api
1、查看健康狀態api
GET _cat/health?v
2、status詳解
有三種狀態:green、yellow、red
- green
每個索引的primary shard和replica shard都是active狀態的
- yellow
每個索引的primary shard都是active狀態的,但是部分replica shard不是active狀態,處於不可用的狀態
- red
不是所有索引的primary shard都是active狀態的,部分索引有數據丟失了
3、索引管理
3.1、查看索引
GET _cat/indices?v
三個索引
3.2、新增索引
PUT test_index?pretty
再次查看 GET _cat/indices?v
3.3、刪除索引
DELETE test_index?pretty
再次查看 GET _cat/indices?v
我們的test_index沒了,被刪了。
三、CRUD
ES的搜索語法賊拉多,賊拉牛逼。這裏只演示
1、添加
1.1、語法格式
PUT index/type/id
{
"key", "value"
}
Elasticsearch7.x已經將type的概念移除了,不能自定義,每個index只能是默認的不可修改的名叫_doc的type,所以語法變成了如下
PUT index/_doc/id
{
"key", "value"
}
1.2、Demo
PUT test_index/_doc/1
{
"name": "mobile",
"desc": "shouji",
"price": 3000,
"brandName": "xiaomi",
"tags": ["5G", "niubi"]
}
2、根據id搜索
2.1、語法格式
GET index/_doc/id
2.2、Demo
GET test_index/_doc/1
3、修改
3.1、全量覆蓋
3.1.1、語法格式
PUT index/_doc/id
{
"key", "value"
}
其實就是添加文檔的語法。如果index/doc/id存在,則會覆蓋掉老的【這個覆蓋需要注意的是比如之前五個字段,你這次只PUT了一個字段,那麼其餘四個會被刪除,相當於刪除重建】。不存在,則會創建。如果只想更新某個字段怎麼辦?看下面的動態更新。
3.1.2、Demo
PUT test_index/_doc/1
{
"name": "xiaomi mobile"
}
再次查看這個document
我們在把數據還原回去,這樣方便下面的測試。
3.2、動態更新
3.2.1、語法格式
POST index/_update/id
{
"doc": {
"key", "value"
}
}
3.2.2、Demo
將name的mobile改爲shouhuan
POST test_index/_update/1
{
"doc": {
"name": "shouhuan"
}
}
查看是否修改成功
4、刪除
4.1、語法格式
DELETE index/_doc/id
4.2、Demo
DELETE test_index/_doc/1
再次查看,看是否是真的刪除了
5、搜索全部
5.1、語法格式
GET index/_search
5.2、Demo
再準備一條id=2的數據
PUT test_index/_doc/2
{
"name": "mobile2",
"desc": "shouji2",
"price": 30002
}
進行搜索
GET test_index/_search
返回結果
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "test_index",
"_type" : "test_type",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"name" : "mobile2",
"desc" : "shouji2",
"price" : 30002
}
},
{
"_index" : "test_index",
"_type" : "test_type",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "mobile",
"desc" : "shouji",
"price" : 3000,
"brandName" : "xiaomi",
"tags" : [
"5G",
"niubi"
]
}
}
]
}
}