2.ElasticSearch添加、查询、修改、删除索引入门教程

es安装教程:https://blog.csdn.net/qq_33743572/article/details/108175092

注:测试环境:CentOS Linux release 7.6.1810 (Core) 
jdk:1.8
elasticsearch:6.8.2 单节点

ES文档命名

es的文档命名格式:

PUT /{index}/{type}/{id}{
  "field": "value",
  ...}

index:索引名。因共同的特性被分组到一起的文档集合,例如把所有产品存储在索引 /products 下,把所有交易信息存储在索引 /sales 下。

type:类型。它允许您在索引中对数据进行逻辑分区

id:ID 是一个字符串,当它和 _index 以及 _type 组合就可以唯一确定 Elasticsearch 中的一个文档。 当你创建一个新的文档,要么提供自己的 _id ,要么让 Elasticsearch 帮你生成。

es与关系型数据库术语对照

关系数据库      ⇒ 数据库        ⇒ 表          ⇒ 行              ⇒ 列(Columns)

Elasticsearch  ⇒ 索引(Index)   ⇒ 类型(type)  ⇒ 文档(Docments)  ⇒ 字段(Fields)  

添加索引

#结构化创建索引,规范化/test 索引的分配和副本数量,以及字段类型
PUT /test
{
  "settings": {
    #数据分片数,默认为5,有时候设置为3
    "number_of_shards": 1,
    #数据备份数,如果只有一台机器,设置为0
    "number_of_replicas": 0
  },
  "mappings": {
    "_doc":{
      "properties":{
        "name":{"type":"text"},
        "age":{"type":"integer"}
      }
    }
  }
}

# 查询/test下的索引
GET /test/_search

# 添加索引
PUT /test/_doc/1
{
  "name":"李雷",
  "age":12,
  "gender":"男"
}

点击右箭头执行

image.png

已经规范了在/test/_doc下的name和age的数据类型,如果换其他类型会报错,但是可以添加除规定的字段以外的字段。

ES支持的基础类型包括

​​​Text:字符串类型,可以被分析

Keyword:字符串类型,不能被分析,只可以精确匹配

Date:日期类型,通常配合format使用,例:{"type":"date","format":"yyyy-MM-dd"}

Long

integer

short

Boolean

Array:数组类型

Object:一般是json

Ip:ip地址

geo_point:地理位置 {

"lat":
"lon":

}

查询索引

测试查询用到的脚本:

#结构化创建索引
PUT /test
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  },
  "mappings": {
    "_doc":{
      "properties":{
        "name":{"type":"text"}
        "age":{"type":"integer"}
      }
    }
  }
}

GET /test/_doc/1

GET /test/_search
{
  "query":{
    "match":{"name":"李雷"}
  },
  "sort":[
    {
      "age":{"order":"asc"}
    }  
  ],
  "aggs": {
    "my_agg_name": {
      "terms": {
        "field": "age"
      }
    }
  }
}

GET /test/_search
{
  "query":{
    "match":{"name":"李雷"}
  },
  "sort":[
    {
      "age":{"order":"asc"}
    }  
  ],
  "aggs": {
    "my_agg_name": {
      "min": {
        "field": "age"
      }
    }
  }
}


PUT /test/_doc/1
{
  "name":"李雷",
  "age":11,
  "gender":"男"
}

PUT /test/_doc/2
{
  "name":"韩梅",
  "age":11,
  "gender":"女"
}

PUT /test/_doc/3
{
  "name":"李小雷",
  "age":10,
  "gender":"男"
}

1.主键查询

image.png

2.查询 All

image.png

查询出了新建的韩梅

3.分页查询

image.png

从0开始查1个

注意:分页查询是在内存中完成,所以不能查太多的分页

4.条件查询

image.png

看到条件查询能同时把新添加的“李小雷”也查询出来了。

5.带排序查询

image.png

从查询结果看到李雷按年龄从小到大排序

6.聚合查询

image.png

按age聚合查询后,从结果看到查询出 age 为 10 和 11 的文档个数都是1一个,并且已经按age从小到大排序

除了terms之外还有sum、avg、stat、min、max、value_count等等还有很多聚合函数可以使用,例:

image.png

image.png

my_agg_name 是名称可以自己起。从右边结果看到使用min函数查询出最小age。

修改索引

PUT /test/_doc/1
{
  "name":"李雷",
  "age":20,
  "gender":"男"
}

POST /test/_doc/1
{
  "name":"李雷",
  "age":30,
  "gender":"男"
}

GET /test/_doc/1
使用PUT和POST都可以添加和修改索引,不同的是:

1.更新:PUT会将新的json值完全替换掉旧的;而POST方式只会更新相同字段的值,其他数据不会改变,新提交的字段若不存在则增加。

2.PUT和DELETE操作是幂等的。所谓幂等是指不管进行多少次操作,结果都一样。比如用PUT修改一篇文章,然后在做同样的操作,每次操作后的结果并没有什么不同,DELETE也是一样。

3.POST操作不是幂等的,比如常见的POST重复加载问题:当我们多次发出同样的POST请求后,其结果是创建了若干的资源。

4.创建操作可以使用POST,也可以使用PUT,区别就在于POST是作用在一个集合资源(/articles)之上的,而PUT操作是作用在一个具体资源之上的(/articles/123)。

删除索引

根据主键删除:

DELETE /test/_doc/1

image.png

删除索引下所有文档:

DELETE /test/

image.png

删除后所有文档都找不到

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值