chore: adds tsvector to members

This commit is contained in:
carla 2025-09-17 13:34:14 +02:00
parent 52e76b1a99
commit dd03000428
3 changed files with 261 additions and 0 deletions

View file

@ -0,0 +1,60 @@
defmodule Mv.Repo.Migrations.AddSearchVectorToMembers do
@moduledoc """
Updates resources based on their most recent snapshots.
This file was autogenerated with `mix ash_postgres.generate_migrations`
"""
use Ecto.Migration
def up do
alter table(:members) do
add :search_vector, :tsvector
end
execute("""
CREATE INDEX members_search_vector_idx
ON members
USING GIN (search_vector)
""")
# Eigene Trigger-Funktion mit Gewichtung
execute("""
CREATE FUNCTION members_search_vector_trigger() RETURNS trigger AS $$
BEGIN
NEW.search_vector :=
setweight(to_tsvector('simple', coalesce(NEW.first_name, '')), 'A') ||
setweight(to_tsvector('simple', coalesce(NEW.last_name, '')), 'A') ||
setweight(to_tsvector('simple', coalesce(NEW.email, '')), 'B') ||
setweight(to_tsvector('simple', coalesce(NEW.birth_date::text, '')), 'C') ||
setweight(to_tsvector('simple', coalesce(NEW.phone_number, '')), 'C') ||
setweight(to_tsvector('simple', coalesce(NEW.join_date::text, '')), 'D') ||
setweight(to_tsvector('simple', coalesce(NEW.exit_date::text, '')), 'D') ||
setweight(to_tsvector('simple', coalesce(NEW.notes, '')), 'B') ||
setweight(to_tsvector('simple', coalesce(NEW.city, '')), 'C') ||
setweight(to_tsvector('simple', coalesce(NEW.street, '')), 'C') ||
setweight(to_tsvector('simple', coalesce(NEW.house_number::text, '')), 'C') ||
setweight(to_tsvector('simple', coalesce(NEW.postal_code::text, '')), 'C');
RETURN NEW;
END
$$ LANGUAGE plpgsql;
""")
execute("""
CREATE TRIGGER update_search_vector
BEFORE INSERT OR UPDATE ON members
FOR EACH ROW
EXECUTE FUNCTION members_search_vector_trigger()
""")
end
def down do
execute("DROP TRIGGER IF EXISTS update_search_vector ON members")
execute("DROP FUNCTION IF EXISTS members_search_vector_trigger()")
execute("DROP INDEX IF EXISTS members_search_vector_idx")
alter table(:members) do
remove :search_vector
end
end
end