前言
最近由于需要频繁的在es修改、删除数据,博主特意将一些简单的增删改查指令都记录了下来。
话不多说,直接上图!
创建索引
put my_index
{
"settings": {
"number_of_replicas": 0
},
"mappings": {
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
},
"analyzer": "ik_max_word"
},
"create_time": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
number_of_shards: 分片数,默认是1,索引数据量太大时应该增加分片数量
number_of_replicas: 副本数,将分片复制(副本数)份,复制的副本放在其他节点用于故障恢复,单节点部署设置为0,否则索引的health状态会是yellow
analyzer: 分词器,ik_max_word最细粒度分词 ik_smart较粗粒度
插入、更新
- post和put都可以插入和更新数据
- post可以不指定id,put必须指定id
- 指定id时,若不存在则插入;存在则更新,更新时都会覆盖原来的值,本次未赋值的字段被空值覆盖
post
在使用post时,如果不指定id,则为新增;若指定id,则为更新
不指定id
post my_index/_doc
{
"name": "第一条测试数据",
"create_time": "2023-12-18 16:26:13",
"id":1
}
可以看出此处es的_id和我们指定的id字段不是同一个,_id是es自动生成的一个几乎不会重复的字段
我们也可以在插入时指定id,指定id时,es会先查询是否已存在该id的文档,进而插入或更新
指定id
- 若不存在此id的文档,则插入
post my_index/_doc/2
{
"name": "第二条测试数据",
"create_time": "2023-12-18 16:26:13",
"id":2
}
- 若存在此id的文档,则更新数据
post my_index/_doc/K-MIfIwBG5ApDfZZ9uTJ
{
"create_time": "2023-12-18 16:26:13",
"id":1
}
可以看到由于更新时没有给name赋值,导致name被空值覆盖。
put
put和post的插入与更新逻辑是一样的,只是put必须指定id
PUT my_index/_doc/2
{
"name":"第二条测试数据",
"id" : 1
}
部分更新
上边的post和put的更新命令是更新整个文档,如果我们只想改其中几个字段,又不想把不需要修改的值重新写一次,那可以用下述命令
post my_index/_update/2
{
"doc":{
"name":"第二条测试数据的name被修改了"
}
}
根据条件删除
删除id为2的文档
POST my_index/_delete_by_query
{
"query":{
"match":{
"id":2
}
}
}
全部删除
POST my_index/_delete_by_query
{
"query":{
"match_all":{}
}
}
数据查询
这里简单介绍一下match、term、match_phrase的用法
- match:对要查询的字段和关键词分词并匹配
- term:对要查询的字段与我们的关键词进行精确匹配
- match_phrase: 对要查询的字段和关键词分词、并严格按照分词的顺序进行匹配
例如现在有一个文档是 我爱中国,当输入的关键词是“中国爱我”时,match匹配成功,match_phrase匹配失败
get my_index/_search
{
"query":{
"match":{
"name": "第二"
}
},
"from": 0,
"size": 20
}