赞
踩
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
)
前面铺垫了这么多基础概念,下面正式开始 Go ES 的增删改查。
在开始实战之前,先介绍一下本文代码示例要实现的功能:
在进行开发之前,需要创建一个 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日志输出
本文从 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
DB-Engines Ranking
百度百科.elasticsearch
云+社区.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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。