GO语言操作Elasticsearch示例分享
作者:93年的老男孩 时间:2023-09-03 03:38:00
Elasticsearch简介
Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库–无论是开源还是私有。
连接Elasticsearch
// 引入g~
~~~~~-elasticsearch
import (
es8 "github.com/elastic/go-elasticsearch/v8"
)
// go-es配置
conf := es8.Config{
Addresses: "http://127.0.0.1:9200",
Username:"elastic",
Password:"jloMQ7ZCTlcZUr_hmDoB",
}
// 创建
client, err := es8.NewClient(conf);
if err != nil{
fmt.Println("============= 创建 elasticsearch 失败 =============")
return
}
// 连接
_, err1 := client.Info()
if err1 != nil{
fmt.Println("============= 连接 elasticsearch 失败 =============")
return
}
创建索引
创建model结构体
type Admin struct{
Id int `gorm:"<-" json:"id"`
UserName string `gorm:"<-" json:"user_name"`
RealName string `gorm:"<-" json:"real_name"`
Mobile string `gorm:"<-" json:"mobile"`
}
初始化model
admin := Admin{
Id: 1,
UserName: "test",
RealName: "测试",
Mobile: "15222222222",
}
创建索引
// 结构体json序列化
str,err := json.Marshal(admin);
if err != nil{
return ;
}
// 创建索引
res1, err1 := client.Index(
"db.table",
bytes.NewReader(str),
client.Index.WithDocumentID("1"), // 索引ID
client.Index.WithRefresh("true") //是否立即创建
);
搜索数据
创建返回结构体
type EsResponse struct{
Hits struct{
Total struct{
Value int `json:"value"`
} `json:"total"`
Hits []struct{
Index string `json:"_index"`
Id string `json:"_id"`
Score float32 `json:"_score"`
Source map[string]any `json:"_source"`
} `json:"hits"`
} `json:"hits"`
}
type EsData struct{
Total int `json:"total"`
List []map[string]any `json:"list"`
}
搜索数据
query := map[string]any{
"query":map[string]any{
"bool":map[string]any{
"must":[]map[string]any{
map[string]any{
"match_phrase":map[string]any{
"user_name": "test",
},
},
map[string]any{
"match_phrase":map[string]any{
"mobile": "15222222222",
},
},
},
},
},
}
str,err := json.Marshal(query);
if err != nil{
return ;
}
res1,err1 := client.Search(client.Search.WithBody(bytes.NewReader(str)));
if err1 != nil{
return ;
}
解析数据
var resData EsResponse;
err2 := json.NewDecoder(res1.Body).Decode(&resData);
if err2 != nil{
return ;
}
var esData EsData;
esData.Total = resData.Hits.Total.Value;
for _, v := range resData.Hits.Hits {
cache := v.Source
cache["_index"] = v.Index;
cache["_id"] = v.Id;
cache["_score"] = v.Score;
esData.List = append(esData.List,cache)
}
修改数据
单条修改
update := map[string]any{
"script": map[string]any{
"source":"ctx._source.user_name='test1';ctx._source.mobile='15211111111';",
"lang": "painless",
},
}
str,err1 := json.Marshal(update)
if err1 != nil{
return ;
}
res2,err2 := client.Update(
"db.table",
"1",
bytes.NewReader(str),
client.Update.WithRefresh("true")
)
if err2 != nil{
return ;
}
批量修改
update := map[string]any{
"query":map[string]any{
"bool":map[string]any{
"must":[]map[string]any{
map[string]any{
"match_phrase":map[string]any{
"user_name": "test",
},
},
map[string]any{
"match_phrase":map[string]any{
"mobile": "15222222222",
},
},
},
},
},
"script": map[string]any{
"source":"ctx._source.user_name='test1';ctx._source.mobile='15211111111';",
"lang": "painless",
},
}
str,err1 := json.Marshal(update)
if err1 != nil{
return ;
}
res2,err2 := client.UpdateByQuery(
[]string{
"db.table",
},
client.UpdateByQuery.WithBody(bytes.NewReader(str)),
client.UpdateByQuery.WithRefresh(true)
)
if err2 != nil{
return ;
}
删除数据
单条删除
res,err := client.Delete(
"db.table",
"1",
client.Delete.WithRefresh("true")
)
if err != nil{
return ;
}
批量删除
query := map[string]any{
"query":map[string]any{
"bool":map[string]any{
"must":[]map[string]any{
map[string]any{
"match_phrase":map[string]any{
"user_name": "test",
},
},
map[string]any{
"match_phrase":map[string]any{
"mobile": "15222222222",
},
},
},
},
},
}
str,err := json.Marshal(query);
if err != nil{
return ;
}
res,err := client.DeleteByQuery(
[]string{
"db.table",
},
bytes.NewReader(str),
client.DeleteByQuery.WithRefresh(true)
)
来源:https://blog.51cto.com/lzcit/6010742
标签:GO,Elasticsearch
0
投稿
猜你喜欢
如何判断元素是否为HTMLElement元素
2024-04-18 10:15:27
python爬取股票最新数据并用excel绘制树状图的示例
2023-11-23 14:37:24
Python聊天室带界面实现的示例代码(tkinter,Mysql,Treading,socket)
2024-01-23 21:46:07
深入解析HetuEngine实现On Yarn原理
2023-10-12 17:56:09
PHP中的一些常用函数收集
2023-10-09 02:06:06
HTML与javascript中常用编码浅析
2008-12-23 12:20:00
python 远程统计文件代码分享
2023-04-13 17:02:08
PHP爬虫框架盘点
2023-06-10 07:10:12
Python实现更改图片尺寸大小的方法(基于Pillow包)
2023-06-20 09:24:43
python远程登录代码
2022-09-12 15:48:15
js操作IE浏览器弹出浏览文件夹可以返回目录路径
2024-04-16 09:50:39
详解解Django 多对多表关系的三种创建方式
2021-03-13 04:59:16
Python中lambda的用法及其与def的区别解析
2021-09-22 13:59:03
centos7中如何利用crontab进行mysql定时备份
2024-01-28 00:50:34
python3 使用OpenCV计算滑块拼图验证码缺口位置(场景示例)
2023-02-27 07:07:18
详解Python中的多线程编程
2023-09-17 00:34:08
asp中怎么输出双引号?
2008-01-31 13:30:00
Pandas中的 transform()结合 groupby()用法示例详解
2023-01-26 10:00:09
ASP表单验证方法总结
2007-10-06 22:43:00
修改mysql密码与忘记mysql密码的处理方法
2024-01-23 21:53:48