以下是一个使用 Go gorm 同步 MySQL 数据到 meilisearch 的示例代码。该代码实现了增量定时同步功能,即每隔一定时间从 MySQL 数据库中获取最新的数据并将其同步到 meilisearch 中。代码使用的 meilisearch 客户端是官方提供的 go-meilisearch 客户端。
package main
import (
"fmt"
"time"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
"github.com/meilisearch/meilisearch-go"
)
// 定义 MySQL 中的表结构
type User struct {
ID uint `gorm:"primary_key"`
Name string `gorm:"type:varchar(100)"`
}
func main() {
// 连接 MySQL 数据库
db, err := gorm.Open("mysql", "user:password@tcp(host:port)/database?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
defer db.Close()
// 连接 meilisearch
client := meilisearch.NewClient(meilisearch.ClientConfig{
Host: "http://localhost:7700",
APIKey: "mykey",
})
// 定义 meilisearch 中的索引
index := client.Index("users")
// 每隔一定时间同步一次数据
for {
// 获取最新的数据
var users []User
db.Find(&users)
// 将数据同步到 meilisearch 中
var documents []map[string]interface{}
for _, user := range users {
document := map[string]interface{}{
"id": user.ID,
"name": user.Name,
}
documents = append(documents, document)
}
_, err = index.AddDocuments(documents)
if err != nil {
fmt.Println(err)
}
// 等待一定时间后继续同步
time.Sleep(10 * time.Minute)
}
}
以上代码将每隔 10 分钟从 MySQL 中获取最新的用户数据,并将其同步到名为 "users" 的 meilisearch 索引中。如需修改同步时间或更改索引名称,请相应地调整代码。