You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dsMin/dsTools/Tools/EsGetMysqlMappingJson.go

114 lines
2.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package main
import (
"bufio"
"bytes"
"dsTools/Utils/DbUtil"
"dsTools/Utils/FileUtil"
"encoding/json"
"fmt"
"io"
"os"
"strings"
)
func main() {
//1、定义参加创建默认mapping的表有哪些
var createDefaultMappingTables []string
//读取
f, err := os.Open("./Config/createDefaultMapping.txt")
if err != nil {
fmt.Println("没有找到创建默认mapping的数据文件createDefaultMapping.txt")
return
}
buf := bufio.NewReader(f)
var shouldBreak = false
for {
line, err := buf.ReadString('\n')
if err != nil || io.EOF == err {
shouldBreak = true
}
line = strings.TrimSpace(line)
if strings.Index(line, "#") < 0 && len(line) > 0 {
createDefaultMappingTables = append(createDefaultMappingTables, line)
}
if shouldBreak {
break
}
}
//头部
head := `{
"settings": {
"number_of_shards": 5,
"index.refresh_interval": "5s"
},
"aliases": [
"#indexName#"
],
"mappings": {
"properties": {`
tail := `}}}`
//遍历每一个表
for i := 0; i < len(createDefaultMappingTables); i++ {
tableName := createDefaultMappingTables[i]
//到mysql中查询
sql := "desc " + tableName
list, err := DbUtil.Engine.QueryInterface(sql)
if err != nil {
fmt.Println(err)
}
//这个是在数据中心区别各地上报数据的主键字段,是拼接出来的
str := `"id":{"type":"keyword"},`
//处理每一个字段
for j := 0; j < len(list); j++ {
c := list[j]
field := string(c["Field"].([]byte))
Type := string(c["Type"].([]byte))
Key := string(c["Key"].([]byte))
//如果是主键那么mapping的字段名称为pk
if Key == "PRI" {
field = "pk"
}
if strings.Index(Type, "int") >= 0 {
str += `"` + field + `": {
"type": "long"
},`
} else if (strings.Index(Type, "datetime")) >= 0 {
str += `"` + field + `": {
"format":"yyyy-MM-dd HH:mm:ss",
"type": "date"
},`
} else if (strings.Index(Type, "date")) >= 0 {
str += `"` + field + `": {
"format":"yyyy-MM-dd",
"type": "date"
},`
} else if (strings.Index(Type, "timestamp")) >= 0 {
str += `"` + field + `": {
"format":"yyyy-MM-dd HH:mm:ss",
"type": "date"
},`
} else {
str += `"` + field + `": {"type": "keyword"},`
}
}
//添加表名
str += `"table_name":{"type": "keyword"}`
//替换别名
head=strings.Replace(head,"#indexName#",tableName,-1)
//输出
p := "MappingDefaultJson/"
//添加头与尾
mappingStr := head + str + tail
//格式化json
var str2 bytes.Buffer
_ = json.Indent(&str2, []byte(mappingStr), "", " ")
//写入json文件
FileUtil.WriteToFile(p+tableName+".json", str2.String())
fmt.Println("正在生成" + tableName + "...")
}
fmt.Println("恭喜所有初始化mapping文件成功生成")
}