ElasticSearch -- ES 7.17.5 Rest Api

介绍

官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/getting-started.html

cluster

Elasticsearch集群是由一个或多个节点组成,通过其集群名称来进行唯一标识。节点在搜索到集群之后,通过判断自身的 cluster.name 来决定是否加入该集群

node

节点就是单个的Elasticsearch实例。在一般情况下,每个节点都在独立的容器中运行。

文档

文档是ES搜索的最小数据单元。简单说,文档相当于关系型数据库中的行。但他有具有一些关系型数据库所没有的特点

  • 文档是独立的
  • 文档中还可以包含文档,可以套娃
  • 文档的结构非常灵活。不同于关系型数据库,无需实现定义文档的结构,可以随用随加

索引

在ES中,索引是文档的集合,每个索引由一个或多个文档组成,并且这些文档可以分布在不同的分片之中。这类似于关系型数据库中的 database 。它只是一种逻辑命名空间,内部包含的是 1~N 个主分片,0~N 个副本

分片

一个索引可以存储海量的数据。比如一个具有10 亿文档的索引占据1 TB 的磁盘空间,而任一节点都没有这么大的磁盘空间或单个节点处理响应太慢。

为了解决这个问题,ES选择将索引划分为多分,这些划分出来的部分就叫分片(shard)。ES会自动管理这些分片的分布和排列,有了分片,我们可以随意扩展数据容量,可以在多个节点上进行并行操作,进一步提高了吞吐量

分片健康状态

分片健康状态就是分片的分配状态,可以间接指示集群当前工作状态

  • 红色:至少存在一个主分片未分配
  • 黄色:主分片均已分配,但至少一个副本为分配
  • 绿色:everything is good

es与mysql对比

  1. es的index: 相当于数据库;如book索引.
  2. 为提高查询效率, es会对索引进行分片: 默认分为5片;
  3. 为防止数据丢失, 会对数据备份 ,备份不会帮助检索数据
  4. 索引下分为type; 对应mysql中的表; es5一个index可有多个索引, es6的版本每个index可以创建1个type, es7中type废除
  5. 每个type下有多个document…对应mysql中的行
  6. 每个document下是多个field. 对应mysql的列

rest api

请添加图片描述

基本操作 basic operation

# 获取集群基本信息
GET /

# 获取别名信息
GET /_cat/aliases?v
# 获取索引信息
GET /_cat/indices?v
# 获取索引的分片信息
GET /_cat/shards?v
# 获取节点的基本信息
GET /_cat/nodes?v
# 获取集群健康状态
GET _cat/health?v

# 获取集群的设置信息,只展示通过API修改过的设置
GET /_cluster/settings
# 获取集群的健康状态
GET /_cluster/health
# 获取集群的详细信息
GET /_cluster/state
# 获取集群的简略状态信息
GET /_cluster/stats

# 获取节点的信息
GET /_nodes
# 获取节点的信息
GET /_nodes/stats

# 测试解析器
GET /_analyze
POST /_analyze
GET /<index>/_analyze
POST /<index>/_analyze

GET /_analyze
{
  "analyzer" : "standard",
  "text" : "Quick Brown Foxes!"
}

# 索引相关
GET /<index>/_count
GET /<index>/_stats
GET /<index>/_mapping
GET /<index>/_settings
GET /<index>/_search
# 配置es慢日志查询
PUT index*/_settings
{
    "index.search.slowlog.threshold.query.warn": "10s",
    "index.search.slowlog.threshold.query.info": "5s",
    "index.search.slowlog.threshold.query.debug": "2s",
    "index.search.slowlog.threshold.query.trace": "500ms",
    "index.search.slowlog.threshold.fetch.warn": "1s",
    "index.search.slowlog.threshold.fetch.info": "800ms",
    "index.search.slowlog.threshold.fetch.debug": "500ms",
    "index.search.slowlog.threshold.fetch.trace": "200ms",
    "index.search.slowlog.level": "info"
}

增删改查 CRUD

  1. 创建/全量替换,记录不存在就是创建, 否则是全量替换.
PUT /index/type/id  
{
	"属性名" : "value"
	...
}

# 样例
# PUT 是全量替换, 且是幂等操作
PUT /company/_doc/1
{
  "age":25,
  "salary":"20k",
  "skill":["java","mysql","es"]
}

  1. 创建
  # 如果不传id, 则系统自动生成一个UUID
  POST /index/type/
  {
  	"属性名":修改值
  }
  # 或者
  POST /index/type/id
  {
  	"属性名":修改值
  }

# 样例
POST /company/_doc
{
  "age":30,
  "salary":"30k",
  "skill":["python","redis","hadoop"]
}
  1. 修改
# 没有带上的属性会被清除
POST /index/type/id
{
  "属性名":修改值
}

# 只更新当前字段,其他字段保留
POST /index/_update/id
{
  "doc": {
	  "属性名":修改值
  }
}

# 样例
# POST修改, skill属性被清除了, 属性现在只有age和salary
POST /company/_doc/1
{
  "age":40,
  "salary":"100k"
}
# 只更新age字段,其他字段保留
POST /company/_update/1
{
  "doc": {
    "age":20
  }
}
  1. 查询
# 对id查询
GET /index/type/id
# 查询全部
GET /index/_search
# 查询指定条数
GET /index/_search/?size=1

# 样例
GET /company/_doc/1
  1. 删除
DELETE /index/type/id

# 样例
DELETE /company/_doc/1

部分更新 partial update

# 只更新当前字段,其他字段保留
POST /index/_update/id
{
  "doc": {
	  "属性名":修改值
  }
}

# 样例
POST /company/_update/1
{
  "doc": {
    "age":20
  }
}

批量操作 bulk operation

批量处理 _bulk:index、delete、create、update

  1. 批量创建/更新 index
POST _bulk
{ "index" : { "_index" : "teacher", "_type" : "_doc", "_id" : "1" } }
{ "name" : "Milton" }
{ "index" : { "_index" : "teacher", "_type" : "_doc", "_id" : "2" } }
{ "name" : "Cherish" }
{ "index" : { "_index" : "teacher", "_type" : "_doc", "_id" : "3" } }
{ "name" : "Evan" }
  1. 批量创建
POST _bulk
{ "create" : { "_index" : "teacher", "_type" : "_doc", "_id" : "4" } }
{ "name" : "yangp" }
{ "create" : { "_index" : "teacher", "_type" : "_doc", "_id" : "5" } }
{ "name" : "yangf" }
  1. 批量更新
POST /teacher/_doc/_bulk
{ "update" : { "_id" : "4" } }
{"doc":{ "name" : "yangp_update" }}
{ "update" : { "_id" : "5" } }
{"doc":{ "name" : "yangf_update" }}
  1. 批量删除
POST /teacher/_doc/_bulk
{"delete":{"_id":"4"}}
{"delete":{"_id":"5"}}

批量获取 _mget

  1. 获取索引teacher中,id为1,2的document
GET /_mget
{
    "docs":[
        {
            "_index":"teacher",
            "_type":"_doc",
            "_id":"1",
            "_source" : false
        },
        {
            "_index":"teacher",
            "_type":"_doc",
            "_id":"2",
            "_source" : ["name"]
        }
        ]
}
  1. 获取索引teacher中,id为1,2的document
GET /teacher/_mget
{
    "docs":[
        {
            "_type":"_doc",
            "_id":"1"
        },
        {
            "_type":"_doc",
            "_id":"2"
        }
        ]
}
  1. 获取索引teacher中,id为1,2的document
GET /teacher/_doc/_mget
{
    "docs":[
        { "_id":"1"},
        { "_id":"2" }
        ]
}
  1. 获取索引teacher中,id为1,2的document
GET /teacher/_doc/_mget
{
    "ids":["1","2"]
}

匹配删除 _delete_by_query

从索引teacher中删除name为“Evan”的document

POST /teacher/_delete_by_query
{
    "query":{
        "match": {
           "name": "Evan"
        }
    }
}

匹配更新_update_by_query

从索引teacher中,更新name包含“Milton”的文档,设置其gener=“Boy”,age=100

POST /teacher/_update_by_query
{
    "query":{
        "match": {
           "name": "Milton"
        }
    },
    "script":{
        "source":"ctx._source.gener=params.gener;ctx._source.age=params.age",
        "params":{
            "gener":"Boy",
           "age":100
        }
    }
}

搜索 search

待续

sql search

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值