编程界的小学生
一、简介
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"
]
}
}
]
}
}
微信公众号