ES-ElasticSearch快速上手

ElasticSearch是一个分布式搜索分析引擎,支持RESTful操作。文章介绍了如何创建、查询、删除索引,管理索引别名,定义映射以及文档的创建、查询、更新和删除等基本功能。
摘要由CSDN通过智能技术生成

ES快速简介

ElasticSearch,是一个分布式的分析和搜索引擎,对外提供了一组Restful风格的API用于操作ES数据库。ES是一个非关系型数据库,它采用JSON的格式保存数据,并且可以对JSON中的每一个字段进行索引,从而实现快速搜索功能。它的层级与关系型数据库对应关系如下表所示:

非关系型ES数据库index索引type类型doc文档Json字段
关系型SQL数据库datavase数据库table表row数据field字段
备注type类型ES从7.x版本弃用默认_doc

ES命令

index索引部分

基础命令

# 创建索引
PUT /index_name 
# 创建索引idx_123
PUT /idx_123 


# 查询索引
GET /index_name
# 查询索引idx_123
GET /idx_123
# 查询所有索引的详细信息
GET /_cat/indices?v
# 查看集群中所有aliases(索引别名)的信息
GET /_cat/aliases?v	


# 删除索引
DELETE /index_name
# 删除索引idx_123
DELETE /idx_123 

索引别名(alias)命令

ES中允许为索引添加别名,可以通过别名alias来操作ES数据

最重要的一点:通过别名只能够对索引中的数据进行查询操作,不能够进行增删改操作,这增加了数据操作的安全性。

添加别名
# 给索引'idx_123'设置别名'abc'
POST /idx_123/_alias/abc

# 返回结果,"aliases"内容为别名
{
	"idx_123": {
		"aliases": {
			"abc": { }
		}
	}
}

如果需要通过别名对数据进行增删改操作,设置**【is_write_index=true】**

# 给索引'idx_123'设置别名'abc'
POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "idx_123", # 索引原名
        "alias": "abc", # 索引别名
        "is_write_index": true # 赋予增删改权限
      }
    }
  ]
}

# 返回结果,true代表成功
{
	"acknowledged": true
}
查询别名

查询索引idx_123的别名

# 查询idx_123的别名
GET /idx_123/_alias

# 返回结果,"aliases"内容为别名"abc"
{
	"idx_123": {
		"aliases": {
			"abc": { }
		}
	}
}
删除别名
# 删除idx_123的别名abc
DELETE /idx_123/_alias/abc
# or
POST /_aliases
{
  "actions": [
    {
      "remove": {
        "index": "idx_123",
        "alias": "abc"
      }
    }
  ]
}

# 返回结果,true代表成功
{
	"acknowledged": true
}

映射(mapping)命令

ES中的mapping,就像sql中定义表的字段属性一样,定义JOSN信息中每个字段的数据类型

类型名对应类型
字符串text(默认,文本被拆分成词便于查询)、keyword(专有名词,只能精确值查找)
整型数值long(默认)、integer、short、byte
浮点数值double、float、half float、scaled float
日期date
布尔true、false
二进制binary
其他类型不建议使用
创建映射

没有创建索引的映射(mapping)时就添加了doc文档时,ES会根据字段类型动态映射出一套mapping,但有时错误的映射会导致后续的增删改查出现问题,还是建议自己创建

# 为"idx_123"创建映射
PUT /idx_123
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "sex": {
        "type": "keyword"
      },
      "age": {
        "type": "integer"
      }
    }
  }
}
查询映射
# 查询"idx_123"的mapping结构
GET /idx_123/_mapping

doc文档部分

7.x版本之前,使用type类型。以下操作的环境都是在7.x版本环境下的命令,默认使用_doc的type类型

创建文档

idx_123的索引下_doc(默认type类型)创建一个id叫做20230324的文档,存储的信息为{“name”: “zhangsan”, “sex”:“male”, “age”: 18}

# 发送命令
POST /idx_123/_doc/20230324
{
	"name": "zhangsan", 
	"sex": "male", 
	"age": 18
}

# 返回结果,"created"代表创建成功
{	
	"result" : "created"
}

查询文档

查询idx_123的索引下_doc/20230324的文档信息

# 通过文档id查询指定文档
GET /idx_123/_doc/20230324

# 返回结果,"_source"内容为文档信息
{
	"_source": {
        "name": "zhangsan", 
        "sex": "male", 
        "age": 18
    }
}

更新文档

一定要注意全量更新与增量更新的区别,使用增量更新更加安全!!!

全量更新和创建文档的方式一样,会覆盖JSON文档所有字段,这导致更新未输入但新建时原本存在的字段数据直接消失!!!

增量更新会只更新指定的JSON字段的数据,其他原本存在的字段数据不受影响。

全量更新,更新idx_123的索引下_doc/20230324的文档,更新的信息为{“sex”:“famale”, “age”: 20}

# 更新命令
POST /idx_123/_doc/20230324
{
	"sex": "famale", 
	"age": 20
}

# 返回结果,"updated"代表更新成功
{	
	"result" : "updated"
}

# 更新结果(name字段数据直接消失不见)
{
	"sex": "famale", 
	"age": 20
}

增量更新,更新idx_123的索引下_doc/20230324的文档,更新的信息为{“sex”:“famale”, “age”: 20}

# 更新命令
POST /idx_123/_doc/20230324/_update
{
	"doc": {
	    "sex": "famale", 
		"age": 20
	}
}

# 返回结果,"updated"代表更新成功
{	
	"result" : "updated"
}

# 更新结果(name字段数据保留更新前数据)
{
	"name": "zhangsan",
	"sex": "famale", 
	"age": 20
}

删除数据

删除idx_123的索引下_doc/20230324的文档

# 删除文档
DELETE /idx_123/_doc/20230324

# 返回结果,"deleted"代表更新成功
{	
	"result" : "deleted"
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值