GO语言操作Elasticsearch示例分享
作者:93年的老男孩 发布时间:2023-09-03 03:38:00
标签:GO,Elasticsearch
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
0
投稿
猜你喜欢
- 本地环境设置在这里我们介绍设置Go编程语言环境,需要在你的计算机上的准备以下两个软件,(A)文本编辑器和(B)Go编译器。文本编辑器这将用来
- asp使用WScript.Shell获取电脑的网络配置信息Option Explicit Dim WSHShe
- PHP+MySQL的组合是构建网站的一个常见搭配,不过如何使用PHP通过Web访问MySQL数据库呢?下面从Web数据库架构的工作原理讲起。
- 最近基于selenium写了一个python小工具,记录下学习记录,自己运行的环境是Ubuntu 14.04.4, Python 2.7,C
- 用采集程序的优点有:无须维护网站,因为采集程序中的数据来自其他网站,它将随着该网站的更新而更新;可以节省服务器资源,一般采集程序就几个文件,
- 之前有写过一篇浏览器的tab设计,这回说说网站的tab设计。一说到tab很自然地就想到了导航、信息架构。随着网站信息结构的复杂化,选择tab
- 最近公司有一个日文项目,由于之前使用的是自己开发的中文CMS,并没有将语言包分离,在网站建设调试过程中出现了令人头疼的乱码问题。乱码出现的原
- System.Data.OleDb.OleDbDataAdapter与System.Data.OleDb.OleDbDataReader的区
- 最近在用fso,读取txt文本文件的内容时碰到了“输入超出了文件尾 ”的运行错误,当txt中的内容为空的时候就出现这个问题了,查了
- 长话短说,今天介绍实现此功能的一个方法,需要了解的朋友可以参考下:一、JS 重载页面,本地刷新,返回上一页 代码如下:<a href=
- 由于某些原因需要把函数直接放到 img 标签上的 onload 属性执行,比如:For some reasons we have to ex
- Float(浮动)概念也许是CSS中最让人迷惑的一个概念吧。Float经常被错误理解,而且因为将上下文元素全部浮动导致的可读性、
- 具体代码如下:Function ASTCreateFtpSite(IPAddress, RootDirectory,&n
- 看过数据库的备份与还原。大多数都是用组件来完成的。其实可通过sql语句来完成。 由于时间关系,未对参数进行验证和界面美化。代码
- 1、定义和使用列表在Python中,列表是由一系列元素按照特定的顺序构成的数据结构,也就是说列表类型的变量可以存储多个数据,且可以重复。1.
- 根据我最近的一些实践以及在和一些读者进行关于HTML表格的使用问题沟通之后,决定写这篇文章。总的来说,我注意到由于误导性信息,他们对于tab
- 根据一些CSS写作经验,如何提高渲染效率及所占用消耗的资源,我们来浅谈一下CSS的渲染效率,书写高效的CSS。1、十六进制的颜色值对位数与大
- 1.INPUT和图片按钮对齐:<form method="post" action="
- 有两个结构完全相同的表,由其中一个表插入另一个表中指定条件的数据,报如下错误: 仅当使用了列列表并且 IDENTITY_INSERT 为 O
- oracle10g数据备份 1.用sql/plus developer,选中要备份的数据表,右击选择"Export data&qu