Make sure hot rank sorts for post and community filter by positive hot ranks. (#3497)
authorDessalines <dessalines@users.noreply.github.com>
Thu, 6 Jul 2023 11:22:48 +0000 (07:22 -0400)
committerGitHub <noreply@github.com>
Thu, 6 Jul 2023 11:22:48 +0000 (13:22 +0200)
* Make sure hot rank sorts for post and community filter by positive hot ranks.

- Context #2994

* Adding a comment.

crates/db_views/src/post_view.rs
crates/db_views_actor/src/community_view.rs

index d1e974d8a107290211abbfb034bcde694116ede6..07ad40d456910be0e5cfc02d104554cad5bb6268 100644 (file)
@@ -391,8 +391,14 @@ impl<'a> PostQuery<'a> {
     }
 
     query = match self.sort.unwrap_or(SortType::Hot) {
-      SortType::Active => query.then_order_by(post_aggregates::hot_rank_active.desc()),
-      SortType::Hot => query.then_order_by(post_aggregates::hot_rank.desc()),
+      SortType::Active => query
+        // Hot ranks fade to zero after a few days, and this filter drastically reduces
+        // the number of rows needed to be joined to.
+        .filter(post_aggregates::hot_rank_active.gt(1))
+        .then_order_by(post_aggregates::hot_rank_active.desc()),
+      SortType::Hot => query
+        .filter(post_aggregates::hot_rank.gt(1))
+        .then_order_by(post_aggregates::hot_rank.desc()),
       SortType::New => query.then_order_by(post_aggregates::published.desc()),
       SortType::Old => query.then_order_by(post_aggregates::published.asc()),
       SortType::NewComments => query.then_order_by(post_aggregates::newest_comment_time.desc()),
index 94bcdaf92424acd4aceccfbb00b917ed53cd6548..899931c4f4a1da5d8d99e0cbe92293e9280e3862 100644 (file)
@@ -184,7 +184,11 @@ impl<'a> CommunityQuery<'a> {
         );
     }
     match self.sort.unwrap_or(Hot) {
-      Hot | Active => query = query.order_by(community_aggregates::hot_rank.desc()),
+      Hot | Active => {
+        query = query
+          .filter(community_aggregates::hot_rank.gt(1))
+          .order_by(community_aggregates::hot_rank.desc())
+      }
       NewComments | TopDay | TopTwelveHour | TopSixHour | TopHour => {
         query = query.order_by(community_aggregates::users_active_day.desc())
       }