ES-04-ElasticSearch增删改查

说明

  • ElasticSearch索引的基本增、删、改、查
  • ElasticSearch文档的基本增、删、改、查
  • 官方文档:https://www.elastic.co/cn/

常用操作

》创建索引

  • 相当于MySQL中的创建数据库

  • 请求格式:/<索引名称>

  • 请求示例

    • 请求方式:GET

    • 发送请求:

      curl -X GET http://192.168.3.201:9200/index001
      
    • 响应结果:

      {
          "acknowledged": true,
          "shards_acknowledged": true,
          "index": "index001"
      }
      
  • PUT请求具有幂等性,首次请求成功,再次请求就是400状态码

》获取单个索引

  • 请求格式:/<索引名称>

  • 请求示例

    • 请求方式:GET

    • 发送请求:

      curl -X GET	http://192.168.3.201:9200/index001
      
    • 响应结果:

      {
          "index001": {
              "aliases": {},
              "mappings": {},
              "settings": {
                  "index": {
                      "creation_date": "1642472671251",
                      "number_of_shards": "1",
                      "number_of_replicas": "1",
                      "uuid": "OHFCZiCwTC6bvlrPGUCZHQ",
                      "version": {
                          "created": "7090399"
                      },
                      "provided_name": "index001"
                  }
              }
          }
      }
      

》获取全部索引

  • 与获取单个索引类似

  • 请求格式:/_cat/indices?v

    • 可选参数[v]:带上v会以表格的形式返回数据,内容更详细,显式更清晰
  • 请求示例

    • 请求方式:GET

    • 发送请求:

      curl -X GET http://192.168.3.201:9200/_cat/indices?v
      
    • 响应结果:

      health status index       uuid                   pri rep docs.count docs.deleted store.size pri.store.size
      yellow open   index001 	OHFCZiCwTC6bvlrPGUCZHQ   1   1          0            0       208b           208b
      

》删除单个索引

  • 请求格式:/<索引名称>

  • 请求示例

    • 请求方式:DELETE

    • 发送请求:

      curl -X DELETE http://192.168.3.201:9200/index001
      
    • 响应结果:

      {
          "acknowledged": true
      }
      

》创建文档

  • 请求格式:/<索引名称>/_doc/<自定义ID>

    • 自定义ID:不填则随机生成
    • 另一种格式:你也可以把_doc改为_create
  • 请求体body

    • 是否必填:是
    • 格式:JSON
    • 请求体中参数名随意
  • 注意:重复创建文档的操作会覆盖数据然后更新_version

  • 请求示例

    • 请求方式:POST

    • 发送请求:

      curl -X POST http://192.168.3.201:9200/index001/_doc/1001 -H 'Content-Type:application/json' -d '
      {
      	"id":1001,
      	"name":"张三",
      	"age":18
      }'
      
    • 响应结果:

      {
          "_index": "index001",
          "_type": "_doc",
          "_id": "1001",
          "_version": 1,
          "result": "created",
          "_shards": {
              "total": 1,
              "successful": 1,
              "failed": 0
          },
          "_seq_no": 0,
          "_primary_term": 5
      }
      
  • 当成功创建文档后,请求体body中的自定义字段就会被加入到关联索引的mappings中的properties中,此时获取index索引结果如下:

    {
        "index001": {
            "aliases": {},
            "mappings": {
                "properties": {
                    "age": {
                        "type": "long"
                    },
                    "id": {
                        "type": "long"
                    },
                    "name": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        }
                    }
                }
            },
            "settings": {
                "index": {
                    "creation_date": "1642474213474",
                    "number_of_shards": "1",
                    "number_of_replicas": "1",
                    "uuid": "MaZr80M8RgCl0PFZ_wjEXA",
                    "version": {
                        "created": "7090399"
                    },
                    "provided_name": "index001"
                }
            }
        }
    }
    

》获取单个文档

  • 请求格式:/<索引名称>/_doc/<自定义ID>

  • 请求示例

    • 请求方式:GET

    • 发送请求:

      curl -X GET http://192.168.3.201:9200/index001/_doc/1001
      
    • 响应结果:

      {
      	"_index": "index001",
      	"_type": "_doc",
      	"_id": "1001",
      	"_version": 2,
      	"_seq_no": 6,
      	"_primary_term": 1,
      	"found": true,
      	"_source": {
      		"id": 1001,
      		"name": "张三",
      		"age": 18
      	}
      }
      

》获取索引下全部文档

  • 请求格式:/<索引名称>/_search

  • 注意:此请求务必不要传请求体body

  • 请求示例

    • 请求方式:GET

    • 发送请求:

      curl -X GET http://192.168.3.201:9200/index001/_search
      
    • 响应结果:

      {
      	"took": 756,
      	"timed_out": false,
      	"_shards": {
      		"total": 1,
      		"successful": 1,
      		"skipped": 0,
      		"failed": 0
      	},
      	"hits": {
      		"total": {
      			"value": 2,
      			"relation": "eq"
      		},
      		"max_score": 1.0,
      		"hits": [
      			{
      				"_index": "index001",
      				"_type": "_doc",
      				"_id": "tJcja34BW7FmJcLFEhTd",
      				"_score": 1.0,
      				"_source": {
      					"id": 1001,
      					"name": "张三",
      					"age": 18
      				}
      			},
      			{
      				"_index": "index001",
      				"_type": "_doc",
      				"_id": "1001",
      				"_score": 1.0,
      				"_source": {
      					"id": 1001,
      					"name": "张三",
      					"age": 18
      				}
      			}
      		]
      	}
      }
      

》全量更新某文档

  • 请求格式:/<索引名称>/_doc/<文档ID>

  • 请求体body

    • 是否必填:是
    • 格式:JSON
  • 请求示例

    • 请求方式:PUT

    • 发送请求:

      curl -X PUT http://192.168.3.201:9200/index001/_doc/1001 -H 'Content-Type:application/json' -d '
      {
      	"id":1001,
      	"name":"张三",
      	"sex":1
      }'
      
    • 响应结果:

      {
          "_index": "index001",
          "_type": "_doc",
          "_id": "1001",
          "_version": 3,
          "result": "updated",
          "_shards": {
              "total": 2,
              "successful": 1,
              "failed": 0
          },
          "_seq_no": 7,
          "_primary_term": 1
      }
      
  • 问题:如果全量更新文档时请求体body中的字段名跟原有的字段名不一样怎么处理?

    • 索引中会增量记录所有使用过的字段(查看索引中记录的字段,其中包含原有的字段age以及新增的字段sex)

      {
        "properties": {
          "age": {
            "type": "long"
          },
          "id": {
            "type": "long"
          },
          "name": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "sex": {
            "type": "long"
          }
        }
      }
      
    • 文档中保留最后一次全量更新的所有字段(同一个索引中不同的文档可以具有不同的字段属性),如下示例一个是age属性一个是sex属性

      {
      	"hits": {
      		"total": {
      			"value": 2,
      			"relation": "eq"
      		},
      		"max_score": 1.0,
      		"hits": [
      			{
      				"_index": "index001",
      				"_type": "_doc",
      				"_id": "tJcja34BW7FmJcLFEhTd",
      				"_score": 1.0,
      				"_source": {
      					"id": 1001,
      					"name": "张三",
      					"age": 18
      				}
      			},
      			{
      				"_index": "index001",
      				"_type": "_doc",
      				"_id": "1001",
      				"_score": 1.0,
      				"_source": {
      					"id": 1001,
      					"name": "张三",
      					"sex": 1
      				}
      			}
      		]
      	}
      }
      

》局部更新某文档

  • 请求格式:/<索引名称>/_update/<文档ID>

  • 请求体body

    • 是否必填:是
    • 格式:JSON,字段用“doc”键包裹
    • 注意:字段是目标文档中已存在的字段时更新原有字段,否则插入新字段。所有字段都会记录在索引的mappings中即使不再使用
  • 请求示例

    • 请求方式:POST

    • 发送请求:

      curl -X POST http://192.168.3.201:9200/index001/_update/1001 -H 'Content-Type:application/json', -d '
      {
      	"doc":{
      		"sex":0
      	}
      }'
      
    • 响应结果:

      {
          "_index": "index001",
          "_type": "_doc",
          "_id": "1001",
          "_version": 4,
          "result": "updated",
          "_shards": {
              "total": 2,
              "successful": 1,
              "failed": 0
          },
          "_seq_no": 8,
          "_primary_term": 1
      }
      

》删除某文档

  • 请求格式:/<索引名称>/_doc/<文档ID>

  • 请求示例

    • 请求方式:DELETE

    • 发送请求:

      curl -X DELETE http://192.168.3.201:9200/index001/_doc/1001
      
    • 响应结果:

      {
          "_index": "index001",
          "_type": "_doc",
          "_id": "1001",
          "_version": 8,
          "result": "deleted",
          "_shards": {
              "total": 2,
              "successful": 1,
              "failed": 0
          },
          "_seq_no": 12,
          "_primary_term": 1
      }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值