🚀 Elasticsearch Mapping 一键生成 Go Struct,支持嵌套解析
📌 前言
在使用 Elasticsearch 的过程中,我们经常会遇到一个非常头疼的问题:
👉 Mapping 写好了,但 Go 结构体要手动写!
尤其是:
- 字段多
- 嵌套深
- 类型复杂(object / nested / array)
手写不仅低效,还容易出错。
为了解决这个问题,我在 gotool.top 上实现了一个工具:
👉 ES Mapping → Go Struct 自动生成(支持嵌套)
🧠 常见痛点
举个例子:
json
{
"mapping": {
"properties": {
"user": {
"properties": {
"name": { "type": "keyword" }, // 姓名
"age": { "type": "integer" } // 年龄
}
},
"tags": {
"type": "keyword"
}
}
}
}
你需要手写:
go
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
type Document struct {
User User `json:"user"`
Tags []string `json:"tags"`
}
问题来了:
❌ 层级一多就崩
❌ nested / object 区分麻烦
❌ 类型映射容易写错
⚙️ 工具能力介绍
我做的这个工具主要解决这些问题:
✅ 1. 自动解析 Mapping
- 支持
properties - 自动递归解析
✅ 2. 支持嵌套结构
- object → struct
- nested → slice struct
✅ 3. 类型自动映射
| ES 类型 | Go 类型 |
|---|---|
| keyword | string |
| text | string |
| integer | int |
| long | int64 |
| float | float32 |
| double | float64 |
| boolean | bool |
| date | string |
🔥 核心能力:嵌套解析
例如:
json
{
"properties": {
"order": {
"properties": {
"id": { "type": "keyword" },
"items": {
"type": "nested",
"properties": {
"name": { "type": "text" },
"price": { "type": "double" }
}
}
}
}
}
}
自动生成:
go
type Item struct {
Name string `json:"name"`
Price float64 `json:"price"`
}
type Order struct {
ID string `json:"id"`
Items []Item `json:"items"`
}
type Document struct {
Order Order `json:"order"`
}
👉 完全自动,无需手写
🌐 在线使用
你可以直接使用我做好的在线工具:
👉 gotool.top(搜索:es 转 struct)
💡 使用场景
- ES → Go 项目快速建模
- 日志系统(ELK)
- 搜索系统
- 数据同步服务
🏁 总结
这个工具帮你解决了:
✅ Mapping → Struct 自动化
✅ 嵌套结构自动展开
✅ 类型映射统一规范