ElasticSearch常用命令

一、ES中概念与MySql的对应关系

index数据库
type(从7.x已弃用,只使用_doc)
document

field

二、常用命令

1、_cat 

# 在最后加 ?v 可显示每列的名称
# 查看所有节点 *代表是主节点
GET /_cat/nodes
http://192.168.109.100:9200/_cat/nodes
# 127.0.0.1  16  93 20  0.56  0.84  0.59  dilm  *  f8d775325d85

# 查看es健康状况
GET /_cat/health
http://192.168.109.100:9200/_cat/health
# 1724719550 00:45:50 elasticsearch yellow 1 1 5 5 0 0 2 0 - 71.4%

# 查看主节点
GET /_cat/master
http://192.168.109.100:9200/_cat/master
# Uuzun4ScS2-AZnomatLM_g 127.0.0.1 127.0.0.1 f8d775325d85

# 查看所有索引 ,等价于mysql数据库的show databases;
GET/_cat/indicies
http://192.168.109.100:9200/_cat/indices
# yellow open bank                     PYfkMXuhSwqyogwQCXx3Hg 1 1 1000 0 414.1kb 414.1kb
# green  open .kibana_task_manager_1   v4QVfo8-St6AASmtQoj19Q 1 0    2 0  26.2kb  26.2kb
# green  open .apm-agent-configuration uq8UqZc9SqKWyGN6-3e__A 1 0    0 0    283b    283b
# green  open .kibana_1                6c0YiB8-TgeYbRweqtBOoQ 1 0   19 6  43.7kb  43.7kb

2、新增/修改/删除

# PUT和POST都可以
# POST新增。如果不指定id,会自动生成id。指定id就会修改这个数据,并新增版本号;
# PUT可以新增也可以修改。PUT必须指定id;由于PUT需要指定id,我们一般用来做修改操作,不指定id会报错。
# 唯一区分是post不指定id时永远为创建
# 要指定类型
PUT customer/_doc/1
{
 "name":"John Doe"
}
# 更新文档 _update
POST customer/_doc/1/_update
{
    "doc":{
        "name":"111"
    }
}
# 或者
POST customer/_doc/1
{
    "doc":{
        "name":"222"
    }
}
# 或者
PUT customer/_doc/1
{
    "doc":{
        "name":"222"
    }
}
#不同:带有update情况下
# POST操作会对比源文档数据,如果相同不会有什么操作,文档version不增加。
# PUT操作总会重新保存并增加version版本
# POST时带_update对比元数据如果一样就不进行任何操作。

# 看场景:
# 对于大并发更新,不带update
# 对于大并发查询偶尔更新,带update;对比更新,重新计算分配规则
# POST更新文档,带有_update
# 删除指定id的记录
DELETE customer/_doc/1

# 删除索引
DELETE customer

3、批量操作

# 语法格式
{action:{metadata}}\n
{request body  }\n 
{action:{metadata}}\n
{request body  }\n

# 批量新建或者修改
POST /customer/extrnal/_bulk 
{"index":{"_id":"1"}}
{"name":"John Doe"}
{"index":{"_id":"2"}}
{"name":"John Doe"}

# 对所有索引批量操作
POST /_bulk
{"delete":{"_index":"website","_type":"_doc","_id":"123"}}
{"create":{"_index":"website","_type":"_doc","_id":"123"}}
{"title":"my first blog post"}
{"index":{"_index":"website","_type":"_doc"}}
{"title":"my second blog post"}
{"update":{"_index":"website","_type":"_doc","_id":"123"}}
{"doc":{"title":"my updated blog post"}}

# bulk API 以此按顺序执行所有的 action (动作)。如果一个单个的动作因任何原因而失败,它将继续处理它后面剩余的动作。当 bulk API 返回时,它将提供每个动作的状态(与发送的顺序相同),所以您可以检查是否一个指定的动作是不是失败了。

4、检索

a、基础检索
# 常规检索
GET bank/_search
{
  "query": {
    "match_all": {}
  },
  "from": 0,
  "size": 5,
  "sort": [
    {
      "account_number": {
        "order": "desc"
      }
    }
  ]
}

# 返回部分字段
GET bank/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "balance": {
        "order": "desc"
      }
    }
  ],
  "from": 0,
  "size": 5,
  "_source": ["balance","firstname"]
}

# mach_phrase 只要包含就可以
GET /bank/_search
{
  "query": {"match_phrase": {
    "address": "mill road"
  }}
}

# 加上 keyword ,则必须完全匹配
GET bank/_search
{
  "query": {
    "match": {
      "address.keyword": "990 Mill Road"
    }
  }
}

# city或者address中包含mill,并且在查询过程中,会对于查询条件进行分词
GET bank/_search
{
  "query": {
    "multi_match": {
      "query": "mill",
      "fields": ["address","city"]
    }
  }
}
b、bool 复合查询
# 复合语句可以合并,任何其他查询语句,包括符合语句。这也就意味着,复合语句之间可以互相嵌套,可以表达非常复杂的逻辑。
# 查询gender=m,并且address=mill的数据
GET bank/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "gender": "M"
          }
        },
        {
          "match": {
            "address": "mill"
          }
        }
      ]
    }
  }
}
c、term 匹配
# 全文检索字段用match,其他非text字段匹配用term
GET bank/_search
{
  "query": {
    "term": {
      "address": "mill Road"
    }
  }
}
d、Aggregation 聚合
# 语法格式
"aggs":{
    "aggs_name这次聚合的名字,方便展示在结果集中":{
        "AGG_TYPE聚合的类型(avg,term,terms)":{}
     }
},
# 搜索address中包含mill的所有人的年龄分布以及平均年龄,但不显示这些人的详情
GET bank/_search
{
  "query": {
    "match": {
      "address": "Mill"
    }
  },
  "aggs": {
    "ageAgg": {
      "terms": {
        "field": "age",
        "size": 10
      }
    },
    "ageAvg": {
      "avg": {
        "field": "age"
      }
    },
    "balanceAvg": {
      "avg": {
        "field": "balance"
      }
    }
  },
  "size": 0
}
# 按照年龄聚合,并且求这些年龄段的这些人的平均薪资
GET bank/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "ageAgg": {
      "terms": {
        "field": "age",
        "size": 100
      },
      "aggs": {
        "ageAvg": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  },
  "size": 0
}
# 查出所有年龄分布,并且这些年龄段中M的平均薪资和F的平均薪资以及这个年龄段的总体平均薪资
GET bank/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "ageAgg": {
      "terms": {
        "field": "age",
        "size": 100
      },
      "aggs": {
        "genderAgg": {
          "terms": {
            "field": "gender.keyword"
          },
          "aggs": {
            "balanceAvg": {
              "avg": {
                "field": "balance"
              }
            }
          }
        },
        "ageBalanceAvg": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  },
  "size": 0
}
e、mapping 映射
# 创建索引并制定映射
PUT /my_index
{
  "mappings": {
    "properties": {
      "age": {
        "type": "integer"
      },
      "email": {
        "type": "keyword"
      },
      "name": {
        "type": "text"
      }
    }
  }
}


# 查看映射
GET /my_index
GET bank/_mapping

# 添加新的字段映射 index为false指这个字段不能被检索
PUT /my_index/_mapping
{
  "properties": {
    "employee-id": {
      "type": "keyword",
      "index": false
    }
  }
}
# 更新映射
# 对于已经存在的字段映射,我们不能更新。更新必须创建新的索引,进行数据迁移
POST reindex
{
  "source":{
      "index":"twitter"
   },
  "dest":{
      "index":"new_twitters"
   }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值