Skip to content

Commit

Permalink
Update trending strategy to use all time play count (#2267)
Browse files Browse the repository at this point in the history
  • Loading branch information
isaacsolo committed Jan 19, 2022
1 parent 9200ecf commit d422cc6
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -365,11 +365,11 @@ def get_time_sorted(time_range):

week_scores = get_time_sorted("week")
month_scores = get_time_sorted("month")
year_scores = get_time_sorted("year")
all_time_scores = get_time_sorted("allTime")

assert len(week_scores) == 7
assert len(month_scores) == 7
assert len(year_scores) == 7
assert len(all_time_scores) == 7

# Check that the type and version fields are correct
for score in scores:
Expand Down
13 changes: 11 additions & 2 deletions discovery-provider/src/queries/get_trending_tracks.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@
from src.tasks.generate_trending import generate_trending
from src.trending_strategies.base_trending_strategy import BaseTrendingStrategy
from src.trending_strategies.trending_strategy_factory import DEFAULT_TRENDING_VERSIONS
from src.trending_strategies.trending_type_and_version import TrendingType
from src.trending_strategies.trending_type_and_version import (
TrendingType,
TrendingVersion,
)
from src.utils.db_session import get_db_read_replica
from src.utils.redis_cache import use_redis_cache

Expand Down Expand Up @@ -55,6 +58,12 @@ def generate_unpopulated_trending_from_mat_views(
session, genre, time_range, strategy, limit=TRENDING_LIMIT
):

# use all time instead of year for version ML51L
if strategy.version == TrendingVersion.ML51L and time_range == "year":
time_range = "allTime"
elif strategy.version != TrendingVersion.ML51L and time_range == "allTime":
time_range = "year"

trending_track_ids_query = session.query(
TrackTrendingScore.track_id, TrackTrendingScore.score
).filter(
Expand Down Expand Up @@ -116,7 +125,7 @@ def _get_trending_tracks_with_session(
args.get("genre"),
args.get("time", "week"),
)
time_range = "week" if time not in ["week", "month", "year"] else time
time_range = "week" if time not in ["week", "month", "year", "allTime"] else time
key = make_trending_cache_key(time_range, genre, strategy.version)

# Will try to hit cached trending from task, falling back
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,63 +64,68 @@ def update_track_score_query(self, session):
"""
begin;
DELETE FROM track_trending_scores WHERE type=:type AND version=:version;
INSERT INTO track_trending_scores
INSERT INTO track_trending_scores
(track_id, genre, type, version, time_range, score, created_at)
select
select
tp.track_id,
tp.genre,
:type,
:version,
:week_time_range,
CASE
CASE
WHEN tp.owner_follower_count < :y
THEN 0
WHEN EXTRACT(DAYS from now() - aip.created_at) > :week
THEN greatest(1.0/:q, pow(:q, greatest(-10, 1.0 - 1.0*EXTRACT(DAYS from now() - aip.created_at)/:week))) * (:N * aip.week_listen_counts + :F * tp.repost_week_count + :O * tp.save_week_count + :R * tp.repost_count + :i * tp.save_count) * tp.karma
ELSE (:N * aip.week_listen_counts + :F * tp.repost_week_count + :O * tp.save_week_count + :R * tp.repost_count + :i * tp.save_count) * tp.karma
END as week_score,
now()
from trending_params tp
inner join aggregate_interval_plays aip
from trending_params tp
inner join aggregate_interval_plays aip
on tp.track_id = aip.track_id;
INSERT INTO track_trending_scores
INSERT INTO track_trending_scores
(track_id, genre, type, version, time_range, score, created_at)
select
select
tp.track_id,
tp.genre,
:type,
:version,
:month_time_range,
CASE
CASE
WHEN tp.owner_follower_count < :y
THEN 0
WHEN EXTRACT(DAYS from now() - aip.created_at) > :month
THEN greatest(1.0/:q, pow(:q, greatest(-10, 1.0 - 1.0*EXTRACT(DAYS from now() - aip.created_at)/:month))) * (:N * aip.month_listen_counts + :F * tp.repost_month_count + :O * tp.save_month_count + :R * tp.repost_count + :i * tp.save_count) * tp.karma
ELSE (:N * aip.month_listen_counts + :F * tp.repost_month_count + :O * tp.save_month_count + :R * tp.repost_count + :i * tp.save_count) * tp.karma
END as month_score,
now()
from trending_params tp
inner join aggregate_interval_plays aip
from trending_params tp
inner join aggregate_interval_plays aip
on tp.track_id = aip.track_id;
INSERT INTO track_trending_scores
INSERT INTO track_trending_scores
(track_id, genre, type, version, time_range, score, created_at)
select
select
tp.track_id,
tp.genre,
:type,
:version,
:year_time_range,
CASE
:all_time_time_range,
CASE
WHEN tp.owner_follower_count < :y
THEN 0
WHEN EXTRACT(DAYS from now() - aip.created_at) > :year
THEN greatest(1.0/:q, pow(:q, greatest(-10, 1.0 - 1.0*EXTRACT(DAYS from now() - aip.created_at)/:year))) * (:N * aip.year_listen_counts + :F * tp.repost_year_count + :O * tp.save_year_count + :R * tp.repost_count + :i * tp.save_count) * tp.karma
ELSE (:N * aip.year_listen_counts + :F * tp.repost_year_count + :O * tp.save_year_count + :R * tp.repost_count + :i * tp.save_count) * tp.karma
END as year_score,
ELSE (:N * ap.count + :R * tp.repost_count + :i * tp.save_count) * tp.karma
END as all_time_score,
now()
from trending_params tp
inner join aggregate_interval_plays aip
on tp.track_id = aip.track_id;
from trending_params tp
inner join aggregate_plays ap
on tp.track_id = ap.play_item_id
inner join tracks t
on ap.play_item_id = t.track_id
where -- same filtering for aggregate_interval_plays
t.is_current is True AND
t.is_delete is False AND
t.is_unlisted is False AND
t.stem_of is Null;
commit;
"""
)
Expand All @@ -129,7 +134,6 @@ def update_track_score_query(self, session):
{
"week": T["week"],
"month": T["month"],
"year": T["year"],
"N": N,
"F": F,
"O": O,
Expand All @@ -141,7 +145,7 @@ def update_track_score_query(self, session):
"version": self.version.name,
"week_time_range": "week",
"month_time_range": "month",
"year_time_range": "year",
"all_time_time_range": "allTime",
},
)
duration = time.time() - start_time
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,62 +64,62 @@ def update_track_score_query(self, session):
"""
begin;
DELETE FROM track_trending_scores WHERE type=:type AND version=:version;
INSERT INTO track_trending_scores
INSERT INTO track_trending_scores
(track_id, genre, type, version, time_range, score, created_at)
select
select
tp.track_id,
tp.genre,
:type,
:version,
:week_time_range,
CASE
CASE
WHEN tp.owner_follower_count < :y
THEN 0
WHEN EXTRACT(DAYS from now() - aip.created_at) > :week
THEN greatest(1.0/:q, pow(:q, greatest(-10, 1.0 - 1.0*EXTRACT(DAYS from now() - aip.created_at)/:week))) * (:N * aip.week_listen_counts + :F * tp.repost_week_count + :O * tp.save_week_count + :R * tp.repost_count + :i * tp.save_count) * tp.karma
ELSE (:N * aip.week_listen_counts + :F * tp.repost_week_count + :O * tp.save_week_count + :R * tp.repost_count + :i * tp.save_count) * tp.karma
END as week_score,
now()
from trending_params_aSPET tp
inner join aggregate_interval_plays aip
from trending_params_aSPET tp
inner join aggregate_interval_plays aip
on tp.track_id = aip.track_id;
INSERT INTO track_trending_scores
INSERT INTO track_trending_scores
(track_id, genre, type, version, time_range, score, created_at)
select
select
tp.track_id,
tp.genre,
:type,
:version,
:month_time_range,
CASE
CASE
WHEN tp.owner_follower_count < :y
THEN 0
WHEN EXTRACT(DAYS from now() - aip.created_at) > :month
THEN greatest(1.0/:q, pow(:q, greatest(-10, 1.0 - 1.0*EXTRACT(DAYS from now() - aip.created_at)/:month))) * (:N * aip.month_listen_counts + :F * tp.repost_month_count + :O * tp.save_month_count + :R * tp.repost_count + :i * tp.save_count) * tp.karma
ELSE (:N * aip.month_listen_counts + :F * tp.repost_month_count + :O * tp.save_month_count + :R * tp.repost_count + :i * tp.save_count) * tp.karma
END as month_score,
now()
from trending_params_aSPET tp
inner join aggregate_interval_plays aip
from trending_params_aSPET tp
inner join aggregate_interval_plays aip
on tp.track_id = aip.track_id;
INSERT INTO track_trending_scores
INSERT INTO track_trending_scores
(track_id, genre, type, version, time_range, score, created_at)
select
select
tp.track_id,
tp.genre,
:type,
:version,
:year_time_range,
CASE
CASE
WHEN tp.owner_follower_count < :y
THEN 0
WHEN EXTRACT(DAYS from now() - aip.created_at) > :year
THEN greatest(1.0/:q, pow(:q, greatest(-10, 1.0 - 1.0*EXTRACT(DAYS from now() - aip.created_at)/:year))) * (:N * aip.year_listen_counts + :F * tp.repost_year_count + :O * tp.save_year_count + :R * tp.repost_count + :i * tp.save_count) * tp.karma
ELSE (:N * aip.year_listen_counts + :F * tp.repost_year_count + :O * tp.save_year_count + :R * tp.repost_count + :i * tp.save_count) * tp.karma
END as year_score,
now()
from trending_params_aSPET tp
inner join aggregate_interval_plays aip
from trending_params_aSPET tp
inner join aggregate_interval_plays aip
on tp.track_id = aip.track_id;
commit;
"""
Expand Down

0 comments on commit d422cc6

Please sign in to comment.