mirror of https://github.com/mastodon/mastodon
				
				
				
			Fix follow recommendation biased towards older accounts (#17126)
							parent
							
								
									0fc73bbcb9
								
							
						
					
					
						commit
						bda8e4f815
					
				@ -0,0 +1,24 @@
 | 
			
		||||
class UpdateAccountSummariesToVersion2 < ActiveRecord::Migration[6.1]
 | 
			
		||||
  def up
 | 
			
		||||
    reapplication_follow_recommendations_v2 do
 | 
			
		||||
      drop_view :account_summaries, materialized: true
 | 
			
		||||
      create_view :account_summaries, version: 2, materialized: { no_data: true }
 | 
			
		||||
      safety_assured { add_index :account_summaries, :account_id, unique: true }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def down
 | 
			
		||||
    reapplication_follow_recommendations_v2 do
 | 
			
		||||
      drop_view :account_summaries, materialized: true
 | 
			
		||||
      create_view :account_summaries, version: 1, materialized: { no_data: true }
 | 
			
		||||
      safety_assured { add_index :account_summaries, :account_id, unique: true }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def reapplication_follow_recommendations_v2
 | 
			
		||||
    drop_view :follow_recommendations, materialized: true
 | 
			
		||||
    yield
 | 
			
		||||
    create_view :follow_recommendations, version: 2, materialized: { no_data: true }
 | 
			
		||||
    safety_assured { add_index :follow_recommendations, :account_id, unique: true }
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@ -0,0 +1,23 @@
 | 
			
		||||
SELECT
 | 
			
		||||
  accounts.id AS account_id,
 | 
			
		||||
  mode() WITHIN GROUP (ORDER BY language ASC) AS language,
 | 
			
		||||
  mode() WITHIN GROUP (ORDER BY sensitive ASC) AS sensitive
 | 
			
		||||
FROM accounts
 | 
			
		||||
CROSS JOIN LATERAL (
 | 
			
		||||
  SELECT
 | 
			
		||||
    statuses.account_id,
 | 
			
		||||
    statuses.language,
 | 
			
		||||
    statuses.sensitive
 | 
			
		||||
  FROM statuses
 | 
			
		||||
  WHERE statuses.account_id = accounts.id
 | 
			
		||||
    AND statuses.deleted_at IS NULL
 | 
			
		||||
    AND statuses.reblog_of_id IS NULL
 | 
			
		||||
  ORDER BY statuses.id DESC
 | 
			
		||||
  LIMIT 20
 | 
			
		||||
) t0
 | 
			
		||||
WHERE accounts.suspended_at IS NULL
 | 
			
		||||
  AND accounts.silenced_at IS NULL
 | 
			
		||||
  AND accounts.moved_to_account_id IS NULL
 | 
			
		||||
  AND accounts.discoverable = 't'
 | 
			
		||||
  AND accounts.locked = 'f'
 | 
			
		||||
GROUP BY accounts.id
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue