{"repo":"3vilive/build-tag-api-with-go-mysql-es","free":true,"listed":false,"github":"https://github.com/3vilive/build-tag-api-with-go-mysql-es","clone":"git clone https://github.com/3vilive/build-tag-api-with-go-mysql-es.git","description":"tag api service base on go + mysql + es","language":"Go","stars":10,"topics":["go","elasticsearch","gin"],"license":null,"category":"api-integrations-sdks","readme_excerpt":"基于 Go + MySQL + ES 实现一个 Tag API 服务 Tag 是一个很常见的功能，这篇文章将使用 Go + MySQL + ES 实现一个 500 多行的 tag API 服务，支持 创建/搜索 标签、标签关联到实体 和 查询实体所关联的标签列表。 目录： - 基于 Go + MySQL + ES 实现一个 Tag API 服务 - 初始化环境 - MySQL - ES - 设计存储结构 - 设计 API - 创建标签 - 搜索标签 - 关联标签到实体 - 查询实体关联的标签列表 - 编码实现 - 实现创建标签的 API - 实现搜索标签的 API - 把标签添加至 ES 索引 - 完善搜索逻辑 - 搜索 API 最终效果 - 实现关联标签到实体 API - 实现查询实体关联的标签列表 API - 最后 初始化环境 MySQL ES 这里直接通过 docker 来启动 ES: 启动后可以通过 curl 检查是否已经启动和获取版本信息： 注意上面的部署 仅用于开发环境 ，如果需要在生产部署通过 docker 部署，请参考官方文档: Install Elasticsearch with Docker。 设计存储结构 先在 MySQL 里面创建一个 test 数据库: 创建 tag tbl 表: tag tbl 用于存储标签，注意这里给我们给 name 字段加上了一个唯一键，并使用 hash 作为索引方法，关于 hash 索引，可以参考官方文档：Comparison of B-Tree and Hash Indexes。 再创建 entity tag tbl 用于存储实体关联的 tag: 设计 API 创建标签 Request: Response: 搜索标签 Request: Response: 关联标签到实体 Request: Response: 查询实体关联的标签列表 Request: Response: 编码实现 初始化： 安装将要用到依赖项： 创建 cmd/api-server/main.go 并编写脚手架代码: 实现创建标签的 API 连接数据库： 定义 Tag 结构： 编写创建标签的逻辑： 启动测试一下： 创建一个名为 test 的标签: 响应： 再创建一个叫做 测试 的标签： 响应： 重新运行一遍创建 test 标签的请求： 响应： 测试结果符合预期，当前完整文件内容如下： 实现搜索标签的 API 导入 elasticsearch 包： 声明 esClient 变量： 在 init 函数中初始化 esClient： 把标签添加至 ES 索引 为了能在 ES 上搜到标签，我们需要在添加标签的时候，把标签添加至 ES 索引中。 先修改 Tag 结构，增加 JSON Tag, 并添加转换成 JSON 字符串的方法: 然后添加一个上报 Tag 到 ES 索引的函数: 在 OnNewTag 函数的底部增加上报的逻辑： 重新启动服务，然后测试创建 Tag，观察日志: 再调用 ES 的 API 验证一下: 完善搜索逻辑 新增一个 SearchTagReqBody 结构，作为搜索标签的请求体 在 OnSearchTag 函数里面增加一些基本的参数校验： 增加一个 O 结构作为 map[string]interface{} 的别名，并且为这个结构添加一个 MustToJSONBytesBuffer() bytes.Buffer 的方法： 定义这个 O 是为了等会构建 ES 查询提供一点便利。 增加 SearchTagsFromES 函数，从","default_branch":null,"files":null,"tree":[],"storefront":"/r/3vilive","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/3vilive/build-tag-api-with-go-mysql-es/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}