【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"
        }
    }
}

 

posted @ 2022-01-26 16:33  emdzz  阅读(52)  评论(0编辑  收藏  举报