AccountSummary.refresh
FollowRecommendation.refresh
- fallback_recommendations = FollowRecommendation.limit(SET_SIZE).index_by(&:account_id)
+ fallback_recommendations = FollowRecommendation.order(rank: :desc).limit(SET_SIZE).index_by(&:account_id)
I18n.available_locales.each do |locale|
recommendations = begin
if AccountSummary.safe.filtered.localized(locale).exists? # We can skip the work if no accounts with that language exist
- FollowRecommendation.localized(locale).limit(SET_SIZE).index_by(&:account_id)
+ FollowRecommendation.localized(locale).order(rank: :desc).limit(SET_SIZE).index_by(&:account_id)
else
{}
end
--- /dev/null
+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
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2021_11_26_000907) do
+ActiveRecord::Schema.define(version: 2021_12_13_040746) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
statuses.language,
statuses.sensitive
FROM statuses
- WHERE ((statuses.account_id = accounts.id) AND (statuses.deleted_at IS NULL))
+ 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 = true) AND (accounts.locked = false))
--- /dev/null
+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