【ElasticSearch】01 CRUD操作
1、资料:
ES官网最新版本下载地址:
https://www.elastic.co/cn/downloads/elasticsearch
历史版本下载:
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-16-0 https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-8-0
2、参考教程:
# 尚硅谷 7.8.X https://www.bilibili.com/video/BV1hh411D7sb # 狂神 7.6.x https://www.bilibili.com/video/BV17a4y1x7zq # 尚学堂 7.4.2 https://www.bilibili.com/video/BV1x54y15775 # 黑马 7.4.0 https://www.bilibili.com/video/BV1Sy4y1G7LL
3、安装:
入门暂时不涉及Linux及集群部署问题,快速上手API
直接在官网上先下载windows平台的压缩包,解压即可
elasticsearch-7.16.3-windows-x86_64.zip
4、启动ElasticSearch:
E:\elasticsearch-7.16.3\bin\elasticsearch.bat
双击脚本文件启动ES
访问地址:
http://localhost:9200/
展示下面信息说明运行正常
{ "name" : "DESKTOP-VA4SKMT", "cluster_name" : "elasticsearch", "cluster_uuid" : "KH3taZdhQ5KqYfMJQoyZDQ", "version" : { "number" : "7.16.3", "build_flavor" : "default", "build_type" : "zip", "build_hash" : "4e6e4eab2297e949ec994e688dad46290d018022", "build_date" : "2022-01-06T23:43:02.825887787Z", "build_snapshot" : false, "lucene_version" : "8.10.1", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
5、索引操作
一、CREATE INDEX 创建索引:
# PUT http://localhost:9200/索引名称
# 案例
http://localhost:9200/student
索引创建成功:
{ "acknowledged": true, "shards_acknowledged": true, "index": "student" }
索引创建失败,索引已经存在
{ "error": { "root_cause": [ { "type": "resource_already_exists_exception", "reason": "index [student/FXObUphUQP65KZEJQk7TgQ] already exists", "index_uuid": "FXObUphUQP65KZEJQk7TgQ", "index": "student" } ], "type": "resource_already_exists_exception", "reason": "index [student/FXObUphUQP65KZEJQk7TgQ] already exists", "index_uuid": "FXObUphUQP65KZEJQk7TgQ", "index": "student" }, "status": 400 }
二、DELETE INDEX 删除索引
# DELETE http://localhost:9200/索引名称
# 案例
http://localhost:9200/student
索引删除成功:
{ "acknowledged": true }
索引删除失败,不存在该索引:
{ "error": { "root_cause": [ { "type": "index_not_found_exception", "reason": "no such index [student]", "resource.type": "index_or_alias", "resource.id": "student", "index_uuid": "_na_", "index": "student" } ], "type": "index_not_found_exception", "reason": "no such index [student]", "resource.type": "index_or_alias", "resource.id": "student", "index_uuid": "_na_", "index": "student" }, "status": 404 }
三、GET INDEX INFO 查看指定索引信息
# GET
http://localhost:9200/索引名称
响应该索引的所有信息
{ "student": { "aliases": {}, "mappings": {}, "settings": { "index": { "routing": { "allocation": { "include": { "_tier_preference": "data_content" } } }, "number_of_shards": "1", "provided_name": "student", "creation_date": "1643182895035", "number_of_replicas": "1", "uuid": "KmLC3oT9Te2lUmOQVf8iXw", "version": { "created": "7160399" } } } } }
如果索引不存在则报错:
{ "error": { "root_cause": [ { "type": "index_not_found_exception", "reason": "no such index [student3]", "resource.type": "index_or_alias", "resource.id": "student3", "index_uuid": "_na_", "index": "student3" } ], "type": "index_not_found_exception", "reason": "no such index [student3]", "resource.type": "index_or_alias", "resource.id": "student3", "index_uuid": "_na_", "index": "student3" }, "status": 404 }
四、INDEX LIST 查看所有索引
# GET
http://localhost:9200/_cat/indices?v
v参数表示展示表头,下面展示了所有的索引
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open .geoip_databases SHVb70kCSJqFhkKIUNyV4g 1 0 42 37 43mb 43mb yellow open student KmLC3oT9Te2lUmOQVf8iXw 1 1 0 0 226b 226b yellow open student1 6qudU33pT5C5-6CDdeFRbw 1 1 0 0 226b 226b yellow open employee3 Fq3VTWk3Q0eT5iEbYsZXIA 1 1 0 0 226b 226b yellow open employee IihIiOzbR8-44mL8qeiDpw 1 1 2 0 17.7kb 17.7kb yellow open employee2 vIHhlBnDRYuWw-B3OYB5cA 1 1 0 0 226b 226b
6、文档操作
一、创建文档 CREATE DOC
# POST
http://localhost:9200/索引名/_doc
# JSON 参数
{ "name" : "Cloud9", "gender" : "male", "age" : 24 }
案例:
文档的主键是ES自动生成的,要查询该文档则需要通过id或者文档的属性作为条件
# POST http://localhost:9200/student/_doc # 响应 { "_index": "student", "_type": "_doc", "_id": "ui1dlX4BrIYsUbCa81Wh", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 0, "_primary_term": 1 }
二、 CREATE & UPDATE DOC 创建/修改文档
创建或者修改时,指定文档的ID(自定义)
# POST / PUT 两种请求都支持
http://localhost:9200/索引名/_doc/文档ID
# JSON参数
{ "name" : "Cloud8", "gender" : "male", "age" : 24 }
案例:
# POST http://localhost:9200/student/_doc/1001 # JSON参数 { "name" : "Cloud9", "gender" : "male", "age" : 24 } # 首次创建 { "_index": "student", "_type": "_doc", "_id": "1001", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 1, "_primary_term": 1 } # 重复请求,将变成更新 { "_index": "student", "_type": "_doc", "_id": "1001", "_version": 2, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 2, "_primary_term": 1 }
更新附带校验操作
# POST # 注意这个操作只能POST请求,地址附加后缀 /_update
# JSON参数需要包括在doc属性种
http://127.0.0.1:9200/索引名/_doc/文档ID/_update # JSON { "doc": { "key1": "value1", "key2": "value2", "key3": "value3", } }
案例:
# POST http://127.0.0.1:9200/student/_doc/1005/_update # JSON { "doc": { "name": "zhangsan2", "nickname": "zhangsan2", "sex": "女", "age": 30 } } # 响应结果 { "_index": "student", "_type": "_doc", "_id": "1005", "_version": 2, "result": "noop", "_shards": { "total": 0, "successful": 0, "failed": 0 }, "_seq_no": 7, "_primary_term": 1 }
三、GET DOC BY ID 查看文档
# GET
http://localhost:9200/student/_doc/1001
案例:
# GET http://localhost:9200/student/_doc/1002 # 查询成功 { "_index": "student", "_type": "_doc", "_id": "1002", "_version": 2, "_seq_no": 5, "_primary_term": 1, "found": true, "_source": { "name": "Cloud9", "gender": "male", "age": 24 } } # 查询未找到 { "_index": "student", "_type": "_doc", "_id": "1003", "found": false }
四、DELETE DOC 删除文档
# DELETE
http://127.0.0.1:9200/索引名/_doc/文档ID
案例:
# DELETE http://127.0.0.1:9200/student/_doc/1005 # 删除成功 { "_index": "student", "_type": "_doc", "_id": "1005", "_version": 3, "result": "deleted", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 8, "_primary_term": 1 } # 删除失败 文档不存在 { "_index": "student", "_type": "_doc", "_id": "1005", "_version": 4, "result": "not_found", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 9, "_primary_term": 1 }
7、映射操作
7版本开始,一个映射只属于一个索引的Type,默认Type为:_doc
一、给指定索引创建映射:
# PUT http://127.0.0.1:9200/索引名/_mapping # JSON参数 { "properties": { "key1": { "type": "text", "index": false }, "key2": { "type": "boolean", "index": false }, "key3": { "type": "long" } } }
映射设定支持的K键类型:
Text
Keyword
Long
Integer
Short
Byte
Double
Float
Half Float
Boolean
Date
Binary
二、查看映射:
# GET
http://127.0.0.1:9200/索引名/_mapping
案例:
# GET http://127.0.0.1:9200/student/_mapping # 结果 { "student": { "mappings": { "properties": { "age": { "type": "long" }, "gender": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "name": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "nickname": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "sex": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } } } }
三、创建索引时直接设定映射
# PUT # 和第一个差不多,没有 /_mapping路径要求 http://127.0.0.1:9200/索引名 # JSON参数 { "properties": { "key1": { "type": "text", "index": false }, "key2": { "type": "boolean", "index": false }, "key3": { "type": "long" } } }