101 lines
3.0 KiB
Go
101 lines
3.0 KiB
Go
|
package dao
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
|
||
|
"go-common/app/job/openplatform/open-sug/model"
|
||
|
"go-common/library/log"
|
||
|
|
||
|
"gopkg.in/olivere/elastic.v5"
|
||
|
)
|
||
|
|
||
|
// SeasonData
|
||
|
func (d *Dao) SeasonData(c context.Context, item *model.Item) (scoreSlice []model.Score, err error) {
|
||
|
var searchResult *elastic.SearchResult
|
||
|
query := elastic.NewMultiMatchQuery(item.Keywords, "title", "alias", "alias_search", "actors^1.25")
|
||
|
searchResult, err = d.es.Search().
|
||
|
Index(fmt.Sprintf("%s_%s", d.c.Env, d.c.ElasticSearch.Season.Index)).
|
||
|
Type(d.c.ElasticSearch.Season.Type).
|
||
|
Query(query).
|
||
|
Timeout(d.c.ElasticSearch.Timeout).
|
||
|
Do(c)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
if searchResult.TotalHits() > 0 {
|
||
|
wishCount, _ := d.WishCount(c, item)
|
||
|
commentCount, _ := d.CommentCount(c, item)
|
||
|
salesCount, _ := d.SalesCount(c, item)
|
||
|
for _, s := range searchResult.Hits.Hits {
|
||
|
seasonJson, _ := s.Source.MarshalJSON()
|
||
|
season := model.EsSeason{}
|
||
|
json.Unmarshal(seasonJson, &season)
|
||
|
scoreSlice = append(scoreSlice, model.Score{SeasonID: s.Id, Score: *s.Score, SeasonName: season.Title})
|
||
|
switch {
|
||
|
case wishCount > d.ItemWishMax[s.Id]:
|
||
|
d.ItemWishMax[s.Id] = wishCount
|
||
|
case wishCount != 0 && wishCount < d.ItemWishMin[s.Id]:
|
||
|
d.ItemWishMin[s.Id] = wishCount
|
||
|
case d.ItemWishMin[s.Id] == 0:
|
||
|
d.ItemWishMin[s.Id] = wishCount
|
||
|
}
|
||
|
switch {
|
||
|
case commentCount > d.ItemCommentMax[s.Id]:
|
||
|
d.ItemCommentMax[s.Id] = commentCount
|
||
|
case commentCount != 0 && commentCount < d.ItemCommentMin[s.Id]:
|
||
|
d.ItemCommentMin[s.Id] = commentCount
|
||
|
case d.ItemCommentMin[s.Id] == 0:
|
||
|
d.ItemCommentMin[s.Id] = commentCount
|
||
|
}
|
||
|
switch {
|
||
|
case salesCount > d.ItemSalesMax[s.Id]:
|
||
|
d.ItemSalesMax[s.Id] = salesCount
|
||
|
case salesCount != 0 && salesCount < d.ItemSalesMin[s.Id]:
|
||
|
d.ItemSalesMin[s.Id] = salesCount
|
||
|
case d.ItemSalesMin[s.Id] == 0:
|
||
|
d.ItemSalesMin[s.Id] = salesCount
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Index ...
|
||
|
func (d *Dao) Index(ctx context.Context, index, typ string, id string, data interface{}) {
|
||
|
resp, err := d.es.Index().Index(index).Type(typ).BodyJson(data).Id(id).Do(ctx)
|
||
|
if err != nil {
|
||
|
log.Error("索引写入失败 index(%s) type(%s) error(%v)", index, typ, err)
|
||
|
return
|
||
|
}
|
||
|
if resp.Result != "" {
|
||
|
log.Info("index(%s) type(%s) 创建成功", resp.Index, resp.Type)
|
||
|
} else {
|
||
|
log.Info("index(%s) type(%s) 更新成功", resp.Index, resp.Type)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// IndexExists ...
|
||
|
func (d *Dao) IndexExists(ctx context.Context, index string) bool {
|
||
|
e, err := d.es.IndexExists(index).Do(ctx)
|
||
|
if err != nil {
|
||
|
log.Error("检查索引是否存在出错 IndexExists(%s) error(%v)", index, err)
|
||
|
}
|
||
|
|
||
|
return e
|
||
|
}
|
||
|
|
||
|
// CreateIndex ...
|
||
|
func (d *Dao) CreateIndex(ctx context.Context, name string, mapping string) bool {
|
||
|
resp, err := d.es.CreateIndex(name).BodyString(mapping).Do(ctx)
|
||
|
if err != nil {
|
||
|
log.Error("创建索引出错 CreateIndex(%s) error(%v)", name, err)
|
||
|
return false
|
||
|
}
|
||
|
if !resp.Acknowledged {
|
||
|
log.Error("创建索引失败 index(%s)", name)
|
||
|
}
|
||
|
return resp.Acknowledged
|
||
|
}
|