You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
3.0 KiB
100 lines
3.0 KiB
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 |
|
}
|
|
|