123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- 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
- }
|