ElasticSearch 7.15.2详解(四):ES命令操作(Rest风格介绍)

Rest风格介绍

​ 一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务端交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制

基本命令

methodurl地址描述
PUT(创建,修改)localhost:9200/索引名称/类型名称/文档id创建文档(指定文档id)
POST(创建)localhost:9200/索引名称/类型名称创建文档(随机文档id)
POST(修改)localhost:9200/索引名称/类型名称/文档id/_update修改文档
DELETE(删除)localhost:9200/索引名称/类型名称/文档id删除文档
GET(查询)localhost:9200/索引名称/类型名称/文档id查询文档通过文档ID
POST(查询)localhost:9200/索引名称/类型名称/文档id/_search查询所有数据

测试

1.创建索引(PUT)

# put 索引名称/类型名称/文档ID
# {请求体}

put test1/type1/1
{
  "name": "dada",
  "age": 18
}

在这里插入图片描述

由于当前的ES版本为7.15.2,可以看到右侧会有警告提示,这是因为ES在7.x版本去掉了类型名换type,所以我们创建索引的方式就变了

  • 索引操作由 PUT {index}/{type}/{id}变成PUT {index}/_doc/{id}
  • Mapping 操作由 PUT {index}/{type}/_mapping变成 PUT {index}/_mapping
  • 所有增删改查搜索操作返回结果里面的关键字_type都将被移除

但是之前的方式依然可以保存使用,推荐使用官方最新方式

在这里插入图片描述

当我们修改数据后再执行,就变成了修改索引

在这里插入图片描述

2.创建索引,指定字段类型(PUT)

类似于建库(建立索引和字段对应类型),也可看做规则的建立

字段类型
  • 字符串类型

    • text:支持分词,全文检索,支持模糊、精确查询,不支持聚合,排序操作;text类型的最大支持的字符长度无限制,适合大字段存储;
    • keyword:不进行分词,直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。
  • 数值型

    • long、Integer、short、byte、double、float、half float、scaled float
  • 日期类型

    • date
  • te布尔类型

    • boolean
  • 二进制类型

    • binary
  • 等等

PUT /test2
{
  "mappings":{
    "properties":{
      "name":{
        "type":"text"
      },
       "age":{
        "type":"long"
      },
       "birthday":{
        "type":"date"
      }
    }
  }
}

在这里插入图片描述

4.获取索引规则(GET)

GET test2

在这里插入图片描述

5.获取默认信息类型(GET)

PUT /test3/_doc/1
{
  "name": "haha",
  "age": 1,
  "birth": "2022-10-10"
}

GET test3

在这里插入图片描述

如果自己的文档字段没有指定,ES就会给我们默认配置字段类型

如上图,查看索引test3的默认规则,会发现其中name的字段类型为text,但该字段的关键字拆分却是keyword类型,不进行分词,直接索引。

所以建议我们在创建索引时,指定字段的类型及拆分规则

PUT /test3
{
  "mappings":{
    "properties":{
      "name":{
        "type":"text",
        "analyzer": "ik_max_word"
      }
    }
  }
}

6.修改(POST)

  • 获取信息

    在这里插入图片描述

  • 第一种,使用PUT 覆盖原来的值

    • 版本+1 version

      在这里插入图片描述

    • 但是如果漏掉哪个字段,没有写的字段会消失

      在这里插入图片描述

  • 第二种,使用POST的update命令

    • 需要注意doc

      POST /test3/_update/1
      {
        "doc": {
            "name": "qqq",
            "age": 4
        }
      }
      
    • 版本会改变

      在这里插入图片描述

    • 不会丢失字段

      在这里插入图片描述

7.删除(DELETE)

GET /test2

DELETE /test2

在这里插入图片描述

8.文档查询(简单条件)

# 创建索引,指定字段类型
PUT /test3
{
  "mappings":{
    "properties":{
      "name":{
        "type":"text"
      },
       "price":{
        "type":"double"
      },
       "num":{
        "type":"long"
      }
    }
  }
}

# 首先填入数据
PUT /test3/_doc/1
{
  "name" : "香蕉",
  "price" : 3.5,
  "num": 10
}

PUT /test3/_doc/2
{
  "name" : "草莓",
  "price" : 19.9,
  "num": 20
}

PUT /test3/_doc/3
{
  "name" : "香瓜",
  "price" : 9.9,
  "num": 30
}

# 最简单的查询,类似与数据库通过id来查询
GET /test3/_search?q=name:草莓

在这里插入图片描述

9.复杂查询

# 查看索引中的信息
GET /test3/_search

在这里插入图片描述

匹配查询
  • match 匹配(会使用分词器解析,先分析文档,在进行查询)
  • _source 过滤字段, 指定查询哪些字段
  • sort 排序,根据哪个字段排序
  • form、size 分页查询 form 从第几个开始, size 每页大小
GET /test3/_search
{
  "query":{
    "match": {
      "name": "香"
    }
  },
  "_source":["name","price"],
  "sort": [
    {
      "price": {
        "order": "asc"
      }
    }
  ],
  "from": 0,
  "size": 10
}

在这里插入图片描述

多条件查询
  • must 相当于and
  • should 相当于or
  • must_out 相当于not(… and …)
  • filter 过滤
GET /test3/_search
{
  "query":{
    "bool": {
      "must": [
        {
          "match": {
            "name": "香"
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "name": "瓜"
          }
        }
      ], 
      "filter": [
        {
          "range": {
            "price": {
              "gte": 0,
              "lte": 10
            }
          }
        }
      ]
    }   
  }
}

在这里插入图片描述

精确查询
  • term 直接通过倒排索引,指定词条查询

    GET /test3/_search
    {
      "query":{
        "term": {
          "num": 10
        }  
      }
    }
    

    在这里插入图片描述

  • 适合查询number,date,keyword,不适合text

    上图中我们知道test3中name的类型为text,我们查询一下

    GET /test3/_search
    {
      "query":{
        "term": {
          "name": "香瓜"
        }  
      }
    }
    

    在这里插入图片描述

text和keyword
  • text:
    • 支持分词全文检索、支持模糊、精确查询,不支持聚合,排序操作;
    • text类型的最大支持的字符长度无限制,适合大字段存储;
  • keyword:
    • 不进行分词直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。
    • keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果
PUT /test4
{
  "mappings": {
    "properties": {
      "name1":{
        "type":"text"
      },
      "name2":{
        "type":"keyword"
      }
    }
  }
}

# 设置字段数据
PUT /test4/_doc/1
{
  "name1":"测试keyword和text是否支持分词",
  "name2":"测试keyword和text是否支持分词"
}


# text 支持分词
# keyword 不支持分词
GET /test4/_search
{
  "query":{
   "match":{
      "name1":"测试"
   }
  }
}# 查的到

GET /test4/_search
{
  "query":{
   "match":{
      "name2":"测试"
   }
  }
}# 查不到,必须是 "测试keyword和text是否支持分词" 才能查到
高亮查询
GET /test3/_search
{
  "query": {
    "match": {
      "name": "草莓"
    }
  },
   "highlight": {
    "fields": {
      "name": {}
    }
  }
}

在这里插入图片描述

# 自定义前缀和后缀
GET /test3/_search
{
  "query": {
    "match": {
      "name":"草莓"
    }
  }
  ,
  "highlight": {
    "pre_tags": "<p class='key' style='color:red'>",
    "post_tags": "</p>", 
    "fields": {
      "name": {}
    }
  }
}

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值