Initial commit: web_hghl_server
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user