Files
rootandClaude Opus 4.7 79ac89b458 Initial commit
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-11-07 10:47:18 +08:00

278 lines
7.4 KiB
Go

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 initVideoIndex(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.ESVideo.Title: esmanager.M{
"type": "text",
"analyzer": esmanager.AnalyzerIkMaxWord,
"search_analyzer": esmanager.AnalyzerIkSmart,
},
FN.ESVideo.MediaType: esmanager.M{
"type": "integer",
},
FN.ESVideo.Remark: esmanager.M{
"type": "text",
"analyzer": esmanager.AnalyzerIkSmart,
"search_analyzer": esmanager.AnalyzerIkSmart,
},
FN.ESVideo.Desc: esmanager.M{
"type": "text",
"analyzer": esmanager.AnalyzerIkSmart,
"search_analyzer": esmanager.AnalyzerIkSmart,
},
FN.ESVideo.Keyworlds: esmanager.M{
"type": "text",
"analyzer": esmanager.AnalyzerIkSmart,
"search_analyzer": esmanager.AnalyzerIkSmart,
},
FN.ESVideo.CreatorName: esmanager.M{
"type": "text",
"analyzer": esmanager.AnalyzerIkSmart,
"search_analyzer": esmanager.AnalyzerIkSmart,
},
FN.ESVideo.Bango: esmanager.M{
"type": "text",
"analyzer": esmanager.AnalyzerIkSmart,
"search_analyzer": esmanager.AnalyzerIkSmart,
},
FN.ESVideo.IssuedBrand: esmanager.M{
"type": "text",
"analyzer": esmanager.AnalyzerIkSmart,
"search_analyzer": esmanager.AnalyzerIkSmart,
},
FN.ESVideo.Status: esmanager.M{
"type": "integer",
},
//FN.ESVideo.IsHot: esmanager.M{
// "type": "boolean",
//},
//FN.ESVideo.Sort: esmanager.M{
// "type": "integer",
//},
FN.ESVideo.WatchTimes: esmanager.M{
"type": "integer",
},
FN.ESVideo.ShowTimes: esmanager.M{
"type": "integer",
},
FN.ESVideo.Comments: esmanager.M{
"type": "integer",
},
FN.ESVideo.AddedTime: esmanager.M{
"type": "date",
"format": "strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss",
},
FN.ESVideo.IssuedAt: esmanager.M{
"type": "date",
"format": "strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss",
},
//FN.ESVideo.CreatedAt: esmanager.M{
// "type": "date",
// "format": "strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss",
//},
},
},
}
if err := esmanager.Instance.InitIndices(esIndex, setting); err != nil {
log.Warn("初始化视频ES索引失败,跳过索引创建", log.Any("索引", esIndex), log.E(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.PlayName: 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))
}
}