Fork me on Gitee

Elastic Search 索引、文档和映射的基本操作

1. ES索引的基础操作

1.1 ES创建索引

对于关系型数据库,创建索引就等同于创建数据库。

在Postman中,向ES服务器发送put请求.

例如创建索引 http://127.0.0.1:9200/shopping

image-20211031171945603

1.2 查看索引

在Postman中,向ES服务器发送Get请求:http://127.0.0.1:9200/_cat/indices?v

image-20211031172603822

请求路径中的_cat表示查看的意思,indices表示索引,所以整体含义就是查看当前ES服务器中的所有索引,类似于MySQL中的show tables的样子。服务器的响应结果如下

image-20211031172746042

1.3 查看单一索引

在Postman中,向ES服务器发送Get请求: http://127.0.0.1:9200/shopping

image-20211031173840633

查看索引向ES服务器发送的的请求路径和创建索引是一致的,但是HTTP方法不一致。

image-20211031173906350

1.4 删除索引

在Postman中,向ES就请你发送Delete请求:htto://127.0.0.1:9200/shopping

image-20211031173308199

image-20211031173331872

在重新访问索引时,服务器响应内容为:索引不存在

image-20211031173508824

image-20211031173541775

2. 文档操作

文档(_doc)可以类比为关系型数据库中的表数据,添加的数据格式为JSON格式。

2.1 创建文档

在Postman中,向ES集群发送post请求,http://127.0.0.1:9200/shopping/_doc

请求体内容为

{
    "title":"小米手机",
    "category":"小米",
    "images":"http://www.gulixueyuan.com/xm.jpg",
    "price":3999.00
}

此处请求方式必须为POST,不能是Put,否则发生错误。

image-20211031175013716

image-20211031174944933

上面的数据创建后,由于没有指定数据唯一性标识(ID),默认情况下,ES服务器会随机生成一个。

如果想要自定义唯一性标识,需要在创建的时候指定: http://127.0.0.1:9200/shopping/_doc/1

image-20211031175439296

{
    "title":"华为手机",
    "category":"华为",
    "images":"http://www.gulixueyuan.com/hw.jpg",
    "price":4999.00
}	

image-20211031175421072

此处如果添加数据明确数据主键,那么请求方式是Put也是可以的

2.2 查看文档(根据主键)

查看文档时,需要指明文档的唯一性标识,类似于MySQL中数据的主键查询,在Postman中,向ES服务器发送Get请求,http://127.0.0.1:9200/shopping/_doc/1

image-20211031180213198

查询成功后,服务器响应结果如下

image-20211031180252825

2.3 查看所有文档

查看索引下包含的所有文档信息。类似于 select *,向ES服务器中发送Get请求, http://127.0.0.1:9200/shopping/_search

image-20211031180454764

查询成功后,服务器响应结果如下

image-20211031180557757

2.4 修改文档

和新增文档一样,输入相同的URL地址请求,如果请求体变化,会将原来的数据内容覆盖。在Postman中,向ES服务器发送Post请求,http://127.0.0.1:9200/shopping/_doc/1

image-20211031181200551

{
"title":"华为手机",
"category":"华为", 
  "images":"http://www.gulixueyuan.com/hw.jpg", 
  "price":6999.00
}

修改成功后,服务器响应结果:

image-20211031181257764

2.5 修改某个字段

修改数据时,也可以只修改某一条给定数据的局部信息

在Postman中,向ES服务器发送POST请求,http://127.0.0.1:9200/shoppong/_update/1

请求内容为:

{
"doc": {
   "price":3000.00
  }
}

修改成功后,服务器响应结果

image-20211031181709100

根据唯一性标识,查询文档结构,可以发现,文档数据已经更新。

image-20211031181820111

image-20211031181840476

2.6 删除文档

在ES中删除一个文档不会立即从磁盘中删除,它只是被标记成已删除(逻辑删除)

在Postman中,向ES服务器发送DELETE请求:http://127.0.0.1:9200/shopping/_doc/1

image-20211031182329482

删除成功后,服务器响应结果

image-20211031182401299

字段 说明
_version 版本(对数据的操作,都会更新版本)
result deleted表示数据被标记为删除

删除后再查询当前文档信息

image-20211031182436684

image-20211031182455514

2.7 条件删除文档

一般删除数据都是根据文档的唯一性标识进行删除,实际操作中,也可以根据条件对多条数据进行删除。

首先分别增加多条数据

image-20211031183007553

{
    "title":"小米手机",
    "category":"小米", 
    "images":"http://www.gulixueyuan.com/xm.jpg", 
    "price":4000.00
}

image-20211031183159684

{
    "title":"华为手机",
    "category":"华为", 
    "images":"http://www.gulixueyuan.com/hw.jpg", 
    "price":4000.00
}

向ES服务器中发送POST请求,http://127.0.0.1:9200/shopping/_delete_by_query

请求内容为

{
    "query": {
        "match": {
            "price": 4000.00
        }
    }
}

删除成功后,服务器响应结果:

image-20211031183539838

字段 说明
took 耗时
timed_out 是否超时
total 总数
deleted 删除数量

3文档映射

索引库(index)的映射,类似于数据库(database)中的表结构(table)。创建数据库表需要设置字段名称,类型,长度,约束等信息;索引库也一样,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做映射(Mapping)。

3.1 创建映射

在Postman中,向ES服务器发Put请求,http://127.0.0.1:9200/shopping/_mapping

请求体内容为

{
    "properties": {
        "name": {
            "type": "text",
            "index": true
        },
        "sex": {
            "type": "text",
            "index": false
        },
        "age": {
            "type": "long",
            "index": false
        }
    }
}

服务器返回的响应结果如下

image-20211031185736083

映射数据说明:

  • 字段名:任意填写。比如上面的name、sex、age

  • Type:类型,ElasticSearch中支持的数据类型非常丰富。

    • String类型。又可以分为两种
      • text:可分词
      • keyword:不可分词,数据会作为完整字段进行匹配
    • Numerical:数值类型,分为两大类
      • 基本数据类型: long、integer、short、byte、double、float、half_float
      • 浮点数的高精度类型:scaled_float
    • Date:日期类型
    • Array:数组类型
    • Object:对象
  • index:是否索引,默认是true,也就是说不进行任何配置,所有字段都会被索引

    • true:字段会被索引,则可以用来进行搜索
    • false:字段不会被索引,无法用来进行搜索
  • store:是否将数据进行独立存储,默认为false

    • 原始的文本会存储在_source 里面,默认情况下其他提取出来的字段都不是独立存储 的,是从_source 里面提取出来的。当然你也可以独立的存储某个字段,只要设置 "store": true 即可,获取独立存储的字段要比从_source 中解析快得多,但是也会占用 更多的空间,所以要根据实际业务需求来设置。
  • analyzer:分词器,这里的ik_max_word即使用ik分词器。

3.2 查看映射

在Postman中,向ES服务器发送Get请求,http://127.0.0.1:9200/shopping/_mapping

image-20211031190646909

服务器响应结果如下

image-20211031190721857

3.3 索引映射关联

初始化索引,并创建索引中的字段对应的映射关系。

向ES服务器发送Put请求,http://127.0.0.1:9200/student

image-20211031191319052

{
    "settings": {},
    "mappings": {
        "properties": {
            "name": {
                "type": "text",
                "index": true
            },
            "sex": {
                "type": "text",
                "index": false
            },
            "age": {
                "type": "long",
                "index": false
            }
        }
    }
}
{
    "settings": {},
    "mappings": {
        "properties": {
            "name": {
                "type": "text",
                "index": true
            },
            "sex": {
                "type": "text",
                "index": false
            },
            "age": {
                "type": "long",
                "index": false
            }
        }
    }
}

服务器响应结果如下

image-20211031191343425

posted @ 2021-10-31 19:20  shine-rainbow  阅读(989)  评论(0编辑  收藏  举报