1.入门简介
2.基本概念
3.客户端库
ES 的 Go 客户端较为流行的有 Elastic 公司官方库go-elasticsearch 和第三方库 olivere/elastic,后者较为流行。
因项目中使用的是 olivere/elastic/v7,所以本文将介绍通过该库完成对 ES 的增删改查。
注意,ES 不同版本需要使用对应版本的 olivere/elastic 包,对应关系如下:
Elasticsearch version | Elastic version | Package URL | Remarks |
---|---|---|---|
7.x | 7.0 | github.com/olivere/elastic/v7 | Use Go modules |
6.x | 6.0 | github.com/olivere/elastic | Use a dependency manager |
5.x | 5.0 | gopkg.in/olivere/elastic.v5 | Actively maintained |
本次使用 ES 的 7.x 的版本,所以使用 github.com/olivere/elastic/v7 作为客户端库,使用 go.mod 来管理依赖:
require(
github.com/olivere/elastic/v7 v7.0.24
)
4.创建客户端
前面铺垫了这么多基础概念,下面正式开始 Go ES 的增删改查。
在开始实战之前,先介绍一下本文代码示例要实现的功能:
- 添加用户信息
- 更新用户信息
- 删除用户信息
- 根据 ID 查询单个用户
- 根据用户信息分页查询相关用户
在进行开发之前,需要创建一个 client,用于操作 ES。这里使用单例模式来实现。
// ES 客户端
var (
esOnce sync.Once
esCli *elastic.Client
)
// GetESClient 获取 ES client
func GetESClient() *elastic.Client {
if esCli != nil {
return esCli
}
esOnce.Do(func() {
cli, err := elastic.NewSimpleClient(
elastic.SetURL("http://test.es.db"), // 服务地址
elastic.SetBasicAuth("user", "secret"), // 账号密码
elastic.SetErrorLog(log.New(os.Stderr, "", log.LstdFlags)), // 设置错误日志输出
elastic.SetInfoLog(log.New(os.Stdout, "", log.LstdFlags)), // 设置info日志输出
)
if err != nil {
panic("new es client failed, err=" + err.Error())
}
esCli = cli
})
return esCli
}
这里创建 ES client 是使用的 NewSimpleClient()
这个方法进行实现的,当然也可以使用另外两个方法:
// NewClient creates a new client to work with Elasticsearch.
func NewClient(options ...ClientOptionFunc) (*Client, error)
// NewClientFromConfig initializes a client from a configuration
func NewClientFromConfig(cfg *config.Config) (*Client, error)
创建时可以提供 ES 连接参数。上面列举的不全,下面给大家介绍一下。
elastic.SetURL(url) 用来设置ES服务地址,如果是本地,就是127.0.0.1:9200。支持多个地址,用逗号分隔即可
elastic.SetBasicAuth("user", "secret") 这个是基于http base auth 验证机制的账号密码
elastic.SetGzip(true) 启动 gzip 压缩
elastic.SetHealthcheckInterval(10*time.Second) 用来设置监控检查时间间隔
elastic.SetMaxRetries(5) 设置请求失败最大重试次数,v7 版本以后已被弃用
elastic.SetSniff(false) 设置是否定期检查集群(默认为true)
elastic.SetErrorLog(log.New(os.Stderr, " ", log.LstdFlags)) 设置错误日志输出
elastic.SetInfoLog(log.New(os.Stdout, "", log.LstdFlags)) 设置info日志输出
5.index 增删改查
6.增加
7.删除
8.修改
9.查询
10.小结
本文从 ES 的基本概念讲起,然后通过包 github/olivere/elastic/v7 完成 ES 基本的增删改查,并给出对应的 RESTful API 操作语句。
ES 功能太过强大,以至于客户端接口也极其繁多,再加上缺少通俗易懂的说明文档,真地让人眼花缭乱,对初学者来说使用起来并不那么友好。
关于 ES 的搜索能力,本文并未给出过多的相关的示例,后续有机会再另起博文续更。
参考文献
github/elastic/elasticsearch
github/olivere/elastic/v7
pkg.go.dev/github.com/olivere/elastic/v7
云+社区.Elasticsearch数据更新全方位解析
golang elasticsearch入门教程- 梯子教程网
golang elasticsearch 查询教程- 梯子教程网
Elasticsearch: 权威指南
go-ElasticSearch入门看这一篇就够了(一)
Golang梦工厂.go-elasticSearch 实战篇,带你学会增删改查
Elasticsearch - mappings之dynamic的三种状态
Elasticsearch Guide [7.13] » REST APIs » Document APIs » ?refresh
Elasticsearch Guide [7.13] » REST APIs » Document APIs » Delete by query API
Elasticsearch Guide [7.14] » Search your data » Retrieve selected fields from a search
Elasticsearch Guide [7.14] » Query DSL » Compound queries » Boolean query
Elasticsearch Guide [8.0] » Mapping » Field data types