说明
- 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 }
-