Create `f_normalize` function to transform filter queries. Also make the FTS migration an actual migration to save new Monsterfork admins the headache.

master
multiple creatures 2019-11-18 03:30:52 -06:00
parent f1230bb319
commit 158369f367
2 changed files with 30 additions and 19 deletions

View File

@ -0,0 +1,28 @@
class MigrateToNewSearchImpl < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def up
safety_assured {
execute 'DROP TRIGGER IF EXISTS tsvectorinsert ON statuses'
execute 'DROP TRIGGER IF EXISTS tsvectorupdate ON statuses'
execute 'DROP FUNCTION IF EXISTS tsv_update_trigger'
execute 'DROP INDEX IF EXISTS tsv_idx'
execute 'ALTER TABLE statuses DROP COLUMN IF EXISTS tsv'
execute 'DROP INDEX IF EXISTS index_statuses_on_text_trgm'
execute 'DROP INDEX IF EXISTS index_statuses_on_spoiler_text_trgm'
execute <<-SQL.squish
CREATE OR REPLACE FUNCTION public.f_normalize(text)
RETURNS text LANGUAGE sql PARALLEL SAFE STRICT AS
$func$
SELECT REGEXP_REPLACE(LOWER(unaccent($1)), '"(.*)"', '\\\\y\\1\\\\y')
$func$
SQL
execute 'CREATE INDEX CONCURRENTLY IF NOT EXISTS index_statuses_on_normalized_text_trgm ON statuses USING GIN (normalized_text gin_trgm_ops)'
}
end
def down
#raise ActiveRecord::IrreversibleMigration
true
end
end

21
dist/search.sql vendored
View File

@ -1,22 +1,5 @@
-- Run this section on Mastodon DB as Postgres superuser. --
-- Before running db:migrate, run this on Mastodon DB as Postgres superuser. --
-- sudo -sHu postgres -- psql mastodon_production
CREATE EXTENSION pg_trgm;
-- Run this section on Mastodon DB as Mastodon user. --
-- sudo -sHu mastodon -- psql mastodon_production
-- Drop old FTS implementation --
DROP TRIGGER IF EXISTS tsvectorinsert ON statuses;
DROP TRIGGER IF EXISTS tsvectorupdate ON statuses;
DROP FUNCTION IF EXISTS tsv_update_trigger;
DROP INDEX IF EXISTS tsv_idx;
ALTER TABLE statuses DROP COLUMN IF EXISTS tsv;
DROP INDEX IF EXISTS index_statuses_on_text_trgm;
DROP INDEX IF EXISTS index_statuses_on_spoiler_text_trgm;
-- Create new trigram indexes --
CREATE INDEX CONCURRENTLY IF NOT EXISTS index_statuses_on_normalized_text_trgm ON statuses USING GIN (normalized_text gin_trgm_ops);
-- Compact tables ---
VACUUM ANALYZE;
CREATE EXTENSION unaccent;