Initial commit: web_hghl_server

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-10-26 16:28:14 +08:00
co-authored by Claude Opus 4.7
commit 65fca60622
653 changed files with 135901 additions and 0 deletions
+112
View File
@@ -0,0 +1,112 @@
package esmod
import (
"fmt"
"videoweb/app/api/proto"
"videoweb/pub/common/log"
"videoweb/pub/common/srvdef"
"videoweb/pub/esmanager"
"videoweb/pub/models/playletmod"
)
// SearchPlaylet 根据关键字搜索短剧
func SearchPlaylet(content string, from int64, size int64, sort string) (int64, []*ESPlaylet, *srvdef.SrvErr) {
fields := []string{
FN.ESPlaylet.Title,
FN.ESPlaylet.Desc,
FN.ESPlaylet.Anchor,
FN.ESPlaylet.CategoryNames,
FN.ESPlaylet.ThemeNames,
FN.ESPlaylet.TagNames,
}
must := esmanager.M{
"bool": esmanager.M{
"must": esmanager.A{
{"multi_match": esmanager.M{
"query": content,
"type": "best_fields",
"fields": fields,
}},
{"term": esmanager.M{FN.ESPlaylet.Status: playletmod.StatusUp}},
},
},
}
switch sort {
case string(proto.SearchSortTypeHot):
must = esmanager.M{
"function_score": esmanager.M{
"query": esmanager.M{
"bool": esmanager.M{
"must": esmanager.A{
{"multi_match": esmanager.M{
"query": content,
"type": "best_fields",
"fields": fields,
}},
{"term": esmanager.M{FN.ESPlaylet.Status: playletmod.StatusUp}},
},
},
},
"functions": esmanager.A{
esmanager.M{
"field_value_factor": esmanager.M{
"field": FN.ESPlaylet.CountBrowse,
"factor": 1.0,
"modifier": "none",
},
},
},
"score_mode": "sum",
"boost_mode": "multiply",
},
}
case string(proto.SearchSortTypeNew):
must = esmanager.M{
"bool": esmanager.M{
"must": esmanager.A{
{"multi_match": esmanager.M{
"query": content,
"type": "best_fields",
"fields": fields,
}},
{"term": esmanager.M{FN.ESPlaylet.Status: playletmod.StatusUp}},
},
"should": esmanager.A{
{"range": esmanager.M{FN.ESPlaylet.OnlineAt: esmanager.M{"gte": "now-30d/d", "boost": 2.0}}},
{"range": esmanager.M{FN.ESPlaylet.OnlineAt: esmanager.M{"gte": "now-180d/d", "boost": 1.5}}},
{"range": esmanager.M{FN.ESPlaylet.OnlineAt: esmanager.M{"gte": "now-365d/d", "boost": 1.1}}},
},
"minimum_should_match": 0,
},
}
}
query := esmanager.M{
"query": must,
"sort": esmanager.A{
esmanager.M{"_score": esmanager.M{"order": "desc"}},
},
"from": from,
"size": size,
"terminate_after": 1000,
}
playletList := &ESPlayletHits{}
err := esmanager.Instance.Search(playletIndex, playletList, query)
if err != nil {
info := fmt.Sprintf("(esmod:SearchPlaylet) Search failed! err:%+v:", err)
log.Warn(info, log.Any("keywords", content), log.Any("from", from), log.Any("size", size))
return 0, nil, srvdef.New(srvdef.ErrElsOperError, "", "")
}
total := int64(0)
result := make([]*ESPlaylet, 0)
if playletList != nil && playletList.Hits != nil && len(playletList.Hits) > 0 {
total = playletList.Total.Value
for _, item := range playletList.Hits {
if item != nil && item.Source != nil {
result = append(result, item.Source)
}
}
}
return total, result, nil
}