本文首发于我的个人博客
这是一篇介绍如何利用golang第三方库https://github.com/olivere/elastic进行elasticsearch的操作的文章。
文章中并不会介绍非常详细的API,更侧重于作者在工作中的使用经验和查文档经验。文章中主要包括以下内容:
- 作者认为比较重要的API设计理念以及文档查阅方式
- 作者在工作中使用到的elasticsearch的实例,包括从接到需求,查阅文档,并实现的过程
API设计理念思考
API的分类
在使用elasticsearch的golang Client过程中,我觉得可以将olivere/elastic的常用API分作三类:
- 面向elasticsearch的metadata的Service
- 面向elasticsearch的data的Service
- 面向Query
而这三类分别对应了对elasticsearch的不同类别的操作:
- 面向elasticsearch的metadata的Service,主要是对elasticsearch的metadata进行查询和操作,比如
- 配置elasticsearch
- 查询elasticsearch的状态,比如集群状态,节点数目等
- 面向elasticsearch的data的Service,住哟是对elasticsearch内的数据和数据格式进行操作
- elasticsearch中的index的metadata进行操作,比如
- 查询是否存在某个index
- 创建并配置index
- elasticsearch中的index下的document的增删改操作
- elasticsearch中的index的metadata进行操作,比如
- 面向Query,主要是对index下的document的查询操作
分类在代码中的体现
首先需要说明,在olivere/elastic的所有操作都是依靠生成一个XXXService
对象然后XXXService.Do(ctx)
来实现的,这里将他们分成面向Service和面向Query只是表示后者我们的主要精力都会集中在构造Query上
面向elasticsearch的metadata的Service
面向elasticsearch的metadata的Service,一般是通过建立连接的ESClient,新建出查询或者操作所需的Service,而后进行操作的模式
比如如下,查询集群内es节点数
// 建立连接的Client
esClient, _