package esmod import ( "context" "fmt" "videoweb/pub/common/log" "videoweb/pub/esmanager" "videoweb/pub/mongos" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) var db *mongos.Collection // Init 初始化数据 func Init(ctx context.Context) { initDBIndex(ctx) initIndex() return } // initIndex 初始化索引 func initIndex() { if esmanager.Instance == nil { return } initPlayletIndex(playletIndex) } // initDBIndex 初始化数据库索引 func initDBIndex(ctx context.Context) { //获取数据库表 db = mongos.Shop.Coll(TN.ESRecord) // 获取数据库表 indexes := []mongo.IndexModel{ { Keys: bson.D{ {Key: FN.ESRecord.EsIndex, Value: 1}, }, Options: options.Index().SetUnique(true), }, } if _, err := db.CreateIndex(ctx, indexes); err != nil { panic(fmt.Sprintf("(esmod:initDBIndex) Create es_record Index failed! err:%+v:", err)) } } func initPlayletIndex(esIndex string) { var setting = esmanager.M{ "settings": esmanager.M{ "number_of_shards": esmanager.NumberOfShards, "number_of_replicas": esmanager.NumberOfReplicas, "analysis": esmanager.M{ "analyzer": esmanager.M{ "ik": esmanager.M{ "tokenizer": esmanager.AnalyzerIkSmart, }, }, }, }, "mappings": esmanager.M{ "properties": esmanager.M{ FN.ESPlaylet.Id: esmanager.M{ "type": "long", }, FN.ESPlaylet.Status: esmanager.M{ "type": "integer", }, FN.ESPlaylet.IsFeatured: esmanager.M{ "type": "boolean", }, FN.ESPlaylet.IsRecommend: esmanager.M{ "type": "boolean", }, FN.ESPlaylet.OperateType: esmanager.M{ "type": "integer", }, FN.ESPlaylet.ShowOnBanner: esmanager.M{ "type": "boolean", }, FN.ESPlaylet.Banner: esmanager.M{ "type": "keyword", "index": false, }, FN.ESPlaylet.OnlineAt: esmanager.M{ "type": "date", "format": "strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss", }, FN.ESPlaylet.ThemeIds: esmanager.M{ "type": "long", }, FN.ESPlaylet.ThemeNames: esmanager.M{ "type": "text", "analyzer": esmanager.AnalyzerIkMaxWord, "search_analyzer": esmanager.AnalyzerIkSmart, }, FN.ESPlaylet.Title: esmanager.M{ "type": "text", "analyzer": esmanager.AnalyzerIkMaxWord, "search_analyzer": esmanager.AnalyzerIkSmart, }, FN.ESPlaylet.Description: esmanager.M{ "type": "keyword", "index": false, }, FN.ESPlaylet.Slug: esmanager.M{ "type": "keyword", }, FN.ESPlaylet.Desc: esmanager.M{ "type": "text", "analyzer": esmanager.AnalyzerIkSmart, "search_analyzer": esmanager.AnalyzerIkSmart, }, FN.ESPlaylet.Anchor: esmanager.M{ "type": "text", "analyzer": esmanager.AnalyzerIkSmart, "search_analyzer": esmanager.AnalyzerIkSmart, }, FN.ESPlaylet.Cover: esmanager.M{ "type": "keyword", "index": false, }, FN.ESPlaylet.TagIds: esmanager.M{ "type": "long", }, FN.ESPlaylet.TagNames: esmanager.M{ "type": "text", "analyzer": esmanager.AnalyzerIkMaxWord, "search_analyzer": esmanager.AnalyzerIkSmart, }, FN.ESPlaylet.TotalEpisode: esmanager.M{ "type": "long", }, FN.ESPlaylet.UpdateStatus: esmanager.M{ "type": "integer", }, FN.ESPlaylet.CountBrowse: esmanager.M{ "type": "long", }, FN.ESPlaylet.HeatValue: esmanager.M{ "type": "long", }, FN.ESPlaylet.CountCollect: esmanager.M{ "type": "long", }, FN.ESPlaylet.CountLike: esmanager.M{ "type": "long", }, FN.ESPlaylet.UpdatedAt: esmanager.M{ "type": "date", "format": "strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss", }, FN.ESPlaylet.CreatedAt: esmanager.M{ "type": "date", "format": "strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss", }, FN.ESPlaylet.SeoInfo: esmanager.M{ "properties": esmanager.M{ "title": esmanager.M{ "type": "keyword", "index": false, }, "keyworld": esmanager.M{ "type": "keyword", "index": false, }, "description": esmanager.M{ "type": "keyword", "index": false, }, }, }, }, }, } if err := esmanager.Instance.InitIndices(esIndex, setting); err != nil { log.Warn("初始化短剧ES索引失败,跳过索引创建", log.Any("索引", esIndex), log.E(err)) } }