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.
138 lines
4.6 KiB
138 lines
4.6 KiB
package dao |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
|
|
"go-common/app/service/main/search/model" |
|
|
|
elastic "gopkg.in/olivere/elastic.v5" |
|
) |
|
|
|
// PgcMedia . |
|
func (d *Dao) PgcMedia(c context.Context, p *model.PgcMediaParams) (res *model.SearchResult, err error) { |
|
query := elastic.NewBoolQuery() |
|
if p.Bsp.KW != "" { |
|
query = query.Must(elastic.NewMultiMatchQuery(p.Bsp.KW, "title").Type("best_fields").TieBreaker(0.3)) |
|
} |
|
if len(p.MediaIds) > 0 { |
|
interfaceSlice := make([]interface{}, len(p.MediaIds)) |
|
for i, d := range p.MediaIds { |
|
interfaceSlice[i] = d |
|
} |
|
query = query.Filter(elastic.NewTermsQuery("media_id", interfaceSlice...)) |
|
} |
|
if len(p.SeasonIds) > 0 { |
|
interfaceSlice := make([]interface{}, len(p.SeasonIds)) |
|
for i, d := range p.SeasonIds { |
|
interfaceSlice[i] = d |
|
} |
|
query = query.Filter(elastic.NewTermsQuery("season_id", interfaceSlice...)) |
|
} |
|
if len(p.SeasonTypes) > 0 { |
|
interfaceSlice := make([]interface{}, len(p.SeasonTypes)) |
|
for i, d := range p.SeasonTypes { |
|
interfaceSlice[i] = d |
|
} |
|
query = query.Filter(elastic.NewTermsQuery("season_type", interfaceSlice...)) |
|
} |
|
if len(p.StyleIds) > 0 { |
|
interfaceSlice := make([]interface{}, len(p.StyleIds)) |
|
for i, d := range p.StyleIds { |
|
interfaceSlice[i] = d |
|
} |
|
query = query.Filter(elastic.NewTermsQuery("style_id", interfaceSlice...)) |
|
} |
|
if p.Status > -1000 { |
|
query = query.Filter(elastic.NewTermQuery("status", p.Status)) |
|
} |
|
if p.ReleaseDateFrom != "" { |
|
query = query.Filter(elastic.NewRangeQuery("release_date").Gte(p.ReleaseDateFrom)) |
|
} |
|
if p.ReleaseDateTo != "" { |
|
query = query.Filter(elastic.NewRangeQuery("release_date").Lte(p.ReleaseDateTo)) |
|
} |
|
if p.ReleaseDateFrom != "" { |
|
query = query.Filter(elastic.NewRangeQuery("release_date").Gte(p.ReleaseDateFrom)) |
|
} |
|
if p.ReleaseDateTo != "" { |
|
query = query.Filter(elastic.NewRangeQuery("release_date").Lte(p.ReleaseDateTo)) |
|
} |
|
if p.SeasonIDFrom > 0 { |
|
query = query.Filter(elastic.NewRangeQuery("season_id").Gte(p.SeasonIDFrom)) |
|
} |
|
if p.SeasonIDTo > 0 { |
|
query = query.Filter(elastic.NewRangeQuery("season_id").Lte(p.SeasonIDTo)) |
|
} |
|
if len(p.ProducerIds) > 0 { |
|
interfaceSlice := make([]interface{}, len(p.ProducerIds)) |
|
for i, d := range p.ProducerIds { |
|
interfaceSlice[i] = d |
|
} |
|
query = query.Filter(elastic.NewTermsQuery("producer_id", interfaceSlice...)) |
|
} |
|
if p.IsDeleted == 0 { |
|
query = query.MustNot(elastic.NewTermQuery("is_deleted", 1)) |
|
} |
|
if len(p.AreaIds) > 0 { |
|
interfaceSlice := make([]interface{}, len(p.AreaIds)) |
|
for i, o := range p.AreaIds { |
|
interfaceSlice[i] = o |
|
} |
|
query = query.Filter(elastic.NewTermsQuery("area_id", interfaceSlice...)) |
|
} |
|
if p.ScoreFrom > 0 { |
|
query = query.Filter(elastic.NewRangeQuery("score_from").Gte(p.ScoreFrom)) |
|
} |
|
if p.ScoreTo > 0 { |
|
query = query.Filter(elastic.NewRangeQuery("score_to").Lte(p.ScoreTo)) |
|
} |
|
if p.IsFinish != "" { |
|
query = query.Filter(elastic.NewTermsQuery("is_finish", p.IsFinish)) |
|
} |
|
if len(p.SeasonVersions) > 0 { |
|
interfaceSlice := make([]interface{}, len(p.SeasonVersions)) |
|
for i, o := range p.SeasonVersions { |
|
interfaceSlice[i] = o |
|
} |
|
query = query.Filter(elastic.NewTermsQuery("season_version", interfaceSlice...)) |
|
} |
|
if len(p.SeasonStatuses) > 0 { |
|
interfaceSlice := make([]interface{}, len(p.SeasonStatuses)) |
|
for i, o := range p.SeasonStatuses { |
|
interfaceSlice[i] = o |
|
} |
|
query = query.Filter(elastic.NewTermsQuery("season_status", interfaceSlice...)) |
|
} |
|
if p.PubTimeFrom != "" { |
|
query = query.Filter(elastic.NewRangeQuery("pub_time").Gte(p.PubTimeFrom)) |
|
} |
|
if p.PubTimeTo != "" { |
|
query = query.Filter(elastic.NewRangeQuery("pub_time").Lte(p.PubTimeTo)) |
|
} |
|
if len(p.SeasonMonths) > 0 { |
|
interfaceSlice := make([]interface{}, len(p.SeasonMonths)) |
|
for i, o := range p.SeasonMonths { |
|
interfaceSlice[i] = o |
|
} |
|
query = query.Filter(elastic.NewTermsQuery("season_month", interfaceSlice...)) |
|
} |
|
if p.LatestTimeFrom != "" { |
|
query = query.Filter(elastic.NewRangeQuery("latest_time").Gte(p.LatestTimeFrom)) |
|
} |
|
if p.LatestTimeTo != "" { |
|
query = query.Filter(elastic.NewRangeQuery("latest_time").Lte(p.LatestTimeTo)) |
|
} |
|
if len(p.CopyrightInfos) > 0 { |
|
interfaceSlice := make([]interface{}, len(p.CopyrightInfos)) |
|
for i, o := range p.CopyrightInfos { |
|
interfaceSlice[i] = o |
|
} |
|
query = query.Filter(elastic.NewTermsQuery("copyright_info", interfaceSlice...)) |
|
} |
|
p.Bsp.Source = []string{"media_id", "season_id", "season_type", "dm_count", "play_count", "fav_count", "score", "latest_time", "pub_time", "release_date"} |
|
if res, err = d.searchResult(c, "externalPublic", "pgc_media", query, p.Bsp); err != nil { |
|
PromError(fmt.Sprintf("es:%s ", p.Bsp.AppID), "%v", err) |
|
} |
|
return |
|
}
|
|
|