From e5adcdea0de6ee89b6271df5efb64f245a6c1d90 Mon Sep 17 00:00:00 2001 From: Aakash Singh Date: Fri, 7 Jul 2023 00:47:31 +0530 Subject: [PATCH] add BtreeGinExtension and add weights to trigger --- .../migrations/0371_auto_20230706_2228.py | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/care/facility/migrations/0371_auto_20230706_2228.py b/care/facility/migrations/0371_auto_20230706_2228.py index 85de452c6a..3a43d9fa8a 100644 --- a/care/facility/migrations/0371_auto_20230706_2228.py +++ b/care/facility/migrations/0371_auto_20230706_2228.py @@ -2,6 +2,7 @@ import django.contrib.postgres.indexes import django.contrib.postgres.search +from django.contrib.postgres.operations import BtreeGinExtension from django.contrib.postgres.search import SearchVector from django.db import migrations @@ -11,7 +12,7 @@ def compute_search_vector(apps, schema_editor): MedibaseMedicine.objects.update( search_vector=( SearchVector("generic", weight="A") - + SearchVector("name", weight="B") + + SearchVector("name", weight="A") + SearchVector("company", weight="C") + SearchVector("cims_class", weight="D") + SearchVector("contents", weight="D") @@ -24,6 +25,7 @@ class Migration(migrations.Migration): ("facility", "0370_merge_20230705_1500"), ] operations = [ + BtreeGinExtension(), migrations.AddField( model_name="medibasemedicine", name="search_vector", @@ -35,15 +37,28 @@ class Migration(migrations.Migration): fields=["search_vector"], name="medibase_search_vector_idx" ), ), + migrations.RunPython( + compute_search_vector, reverse_code=migrations.RunPython.noop + ), migrations.RunSQL( sql=""" + CREATE OR REPLACE FUNCTION medibase_search_vector_trigger() RETURNS trigger AS $$ + BEGIN + NEW.search_vector := + setweight(to_tsvector('pg_catalog.english', COALESCE(NEW.name, '')), 'A') || + setweight(to_tsvector('pg_catalog.english', COALESCE(NEW.generic, '')), 'A') || + setweight(to_tsvector('pg_catalog.english', COALESCE(NEW.company, '')), 'C') || + setweight(to_tsvector('pg_catalog.english', COALESCE(NEW.cims_class, '')), 'D') || + setweight(to_tsvector('pg_catalog.english', COALESCE(NEW.contents, '')), 'D'); + RETURN NEW; + END + $$ LANGUAGE plpgsql; + CREATE TRIGGER medibase_search_vector_trigger BEFORE INSERT OR UPDATE OF name, generic, company, cims_class, contents, search_vector ON facility_medibasemedicine - FOR EACH ROW EXECUTE PROCEDURE - tsvector_update_trigger( - search_vector, 'pg_catalog.english', name, generic, company, cims_class, contents - ); + FOR EACH ROW EXECUTE FUNCTION medibase_search_vector_trigger(); + UPDATE facility_medibasemedicine SET search_vector = NULL; """, reverse_sql=""" @@ -51,7 +66,4 @@ class Migration(migrations.Migration): ON facility_medibasemedicine; """, ), - migrations.RunPython( - compute_search_vector, reverse_code=migrations.RunPython.noop - ), ]