一、安装docker
-
1、在
ubuntu系统中直接输入docker ps如果没有安装的会直接提示你用什么命令来安装propertiesapt install docker.io -
2、配置
docker的镜像源propertiescat /etc/docker/daemon.json { "registry-mirrors": [ "https://713yqum7.mirror.aliyuncs.com", "https://stii1wjo.mirror.aliyuncs.com", "https://docker.1ms.run", "https://dockerproxy.com", "https://mirror.ccs.tencentyun.com", "https://registry.docker-cn.com", "https://hub-mirror.c.163.com" ] } -
3、重启
dockerpropertiessudo systemctl daemon-reload sudo systemctl restart docker sudo systemctl status docker
二、安装elasticsearch
-
1、配置
es的环境propertiesmkdir -p /opt/es/config & mkdir -p /opt/es/data & mkdir -p /opt/es/plugins chmod 777 /opt/es/data -
2、配置对外访问
yamlecho "http.host: 0.0.0.0" > /opt/es/config/elasticsearch.yml -
3、
docker拉取镜像propertiesdocker pull elasticsearch:7.12.0 -
4、启动容器
propertiesdocker run -d \ --name es \ -p 9200:9200 \ -p 9300:9300 \ -e "discovery.type=single-node" \ -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \ -v /opt/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /opt/es/data:/usr/share/elasticsearch/data \ -v /opt/es/plugins:/usr/share/elasticsearch/plugins \ elasticsearch:7.12.0 -
5、服务器上部署要先开发安全组端口
-
6、浏览器直接访问
http://ip地址:9200/,出现下面的就表示安装成功了json{ "name": "8bd0f1e062c4", "cluster_name": "elasticsearch", "cluster_uuid": "UfzRsKGdRKmYAeETDcbuZA", "version": { "number": "7.12.0", "build_flavor": "default", "build_type": "docker", "build_hash": "78722783c38caa25a70982b5b042074cde5d3b3a", "build_date": "2021-03-18T06:17:15.410153305Z", "build_snapshot": false, "lucene_version": "8.8.0", "minimum_wire_compatibility_version": "6.8.0", "minimum_index_compatibility_version": "6.0.0-beta1" }, "tagline": "You Know, for Search" }
三、客户端可视化界面的安装
-
1、这里使用谷歌插件来查看
es -
2、谷歌浏览器插件市场上搜索
multi Elasticsearch head -
3、第一次进来要添加
es的连接
-
4、这里的索引可以类比为
mysql数据库中的表
四、配置登录账号和密码
-
1、使用命令启动新的容器
propertiesdocker run --name es \ -p 9200:9200 \ -p 9300:9300 \ -e "discovery.type=single-node" \ -e "xpack.security.enabled=true" \ -e "ELASTIC_PASSWORD=123456" \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -v /opt/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /opt/es/data:/usr/share/elasticsearch/data \ -v /opt/es/plugins:/usr/share/elasticsearch/plugins \ -d elasticsearch:7.12.0 -
2、生成的账号和密码分别为
elastic是默认超级管理员账号123456是你设置的密码
五、在go里面基本使用es操作索引
-
1、安装依赖包
propertiesgo get -u github.com/olivere/elastic/v7 -
2、基本连接并且挂载到全局变量上
gopackage global import "github.com/olivere/elastic/v7" var ( ESClient *elastic.Client )gopackage core import ( "fmt" "gin-admin-api/test20260304-es/global" "github.com/olivere/elastic/v7" ) func EsConnect() { client, err := elastic.NewClient( elastic.SetURL("http://101.32.208.202:9200"), elastic.SetSniff(false), elastic.SetBasicAuth("elastic", "123456"), ) if err != nil { fmt.Println("连接es失败") return } fmt.Println("连接es成功") global.ESClient = client } -
3、创建数据模型(针对
go语言里面的数据模型)gotype UserModel struct { ID uint `json:"id"` // 主键id UserName string `json:"user_name"` // 用户名 NickName string `json:"nick_name"` // 昵称 CreatedAt string `json:"created_at"` // 创建时间 Age int `json:"age"` // 年龄 } func (UserModel) Index() string { return "user_index" } -
4、索引的增删查
go// 创建索引 result, err := global.ESClient.CreateIndex(models.UserModel{}.Index()).Do(context.Background()) fmt.Println(result, err) // 2.判断索引是否存在 exist, err := global.ESClient.IndexExists(models.UserModel{}.Index()).Do(context.Background()) fmt.Println(exist, err) // 3.删除索引 result, err := global.ESClient.DeleteIndex(models.UserModel{}.Index()).Do(context.Background()) fmt.Println(result, err) -
5、实际操作中不创建索引也可以直接插入数据
六、go语言直接操作es文档(数据)
-
1、单个插入数据到
es中gouser := models.UserModel{ ID: 1, // 主键id UserName: "张三", // 用户名 NickName: "张三昵称", // 昵称 CreatedAt: "2026-03-04 12:00:00", // 创建时间 Age: 18, // 年龄 } result, err := global.ESClient.Index().Index(models.UserModel{}.Index()).BodyJson(user).Do(context.Background()) fmt.Println(utils.MapToJson(result), err) // {"_index":"user_index","_type":"_doc","_id":"5JxMuZwBrv37MzDrrnku","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1} -
2、批量插入数据
gouserList := []models.UserModel{ { ID: 1, // 主键id UserName: "张三", // 用户名 NickName: "张三昵称", // 昵称 CreatedAt: "2026-03-04 12:00:00", // 创建时间 Age: 18, // 年龄 }, { ID: 2, // 主键id UserName: "李四", // 用户名 NickName: "李四昵称", // 昵称 CreatedAt: "2026-03-05 12:00:00", // 创建时间 Age: 20, // 年龄 }, { ID: 3, // 主键id UserName: "王五", // 用户名 NickName: "王五昵称", // 昵称 CreatedAt: "2026-03-06 12:00:00", // 创建时间 Age: 22, // 年龄 }, } bulk := global.ESClient.Bulk().Index(models.UserModel{}.Index()).Refresh("true") for _, user := range userList { req := elastic.NewBulkCreateRequest().Doc(user) bulk.Add(req) } res, err := bulk.Do(context.Background()) fmt.Println(utils.MapToJson(res), err) -
3、根据
id来删除数据gores, err := global.ESClient.Delete().Index(models.UserModel{}.Index()).Id("45xMuZwBrv37MzDrTnn7").Do(context.Background()) fmt.Println(utils.MapToJson(res), err) -
4、根据
id列表批量删除数据goidList := []string{ "tGcofYkBWS69Op6QHJ2g", "tWcpfYkBWS69Op6Q050w", } bulk := global.ESClient.Bulk().Index(models.UserModel{}.Index()).Refresh("true") for _, s := range idList { req := elastic.NewBulkDeleteRequest().Id(s) bulk.Add(req) } res, err := bulk.Do(context.Background()) fmt.Println(utils.MapToJson(res), err) -
5、修改数据
gores, err := global.ESClient.Update().Index(models.UserModel{}.Index()).Id("5JxMuZwBrv37MzDrrnku").Doc(map[string]interface{}{ "user_name": "张三1", "nick_name": "张三昵称1", }).Do(context.Background()) fmt.Println(utils.MapToJson(res), err) -
6、分页查询数据
golimit := 2 page := 1 from := (page - 1) * limit res, err := global.ESClient.Search(models.UserModel{}.Index()).From(from).Size(limit).Do(context.Background()) fmt.Println(utils.MapToJson(res), err) // 查询数据结果 // {"took":1,"hits":{"total":{"value":4,"relation":"eq"},"max_score":1,"hits":[{"_score":1,"_index":"user_index","_type":"_doc","_id":"5ZxSuZwBrv37MzDrNHlz","_seq_no":null,"_primary_term":null,"_source":{"id":1,"user_name":"张三","nick_name":"张三昵称","created_at":"2026-03-04 12:00:00","age":18}},{"_score":1,"_index":"user_index","_type":"_doc","_id":"5pxSuZwBrvNHlz","_seq_no":null,"_primary_term":null,"_source":{"id":2,"user_name":"李四","nick_name":"李四昵称","created_at":"2026-03-05 12:00:00","age":20}}]},"_shards":{"total":1,"successfufailed":0}} -
7、精确查找
go// 增加查询条件 query := elastic.NewTermQuery("user_name.keyword", "张三") res, err := global.ESClient.Search(models.UserModel{}.Index()).Query(query).From(from).Size(limit).Do(context.Background()) fmt.Println(utils.MapToJson(res), err) -
8、模糊查找
goquery := elastic.NewMatchQuery("user_name", "张三") res, err := global.ESClient.Search(models.UserModel{}.Index()).Query(query).From(from).Size(limit).Do(context.Background()) fmt.Println(utils.MapToJson(res), err) -
9、因为上面都是自动创建
mapping的json"user_name": { "type": "text", "fields": { "keyword": { "type": "keyword" } } }user_name→ text(会分词)user_name.keyword→ keyword(不分词)