Skip to content

Commit

Permalink
add BtreeGinExtension and add weights to trigger
Browse files Browse the repository at this point in the history
  • Loading branch information
sainak committed Jul 6, 2023
1 parent 9dd2c3a commit e5adcde
Showing 1 changed file with 20 additions and 8 deletions.
28 changes: 20 additions & 8 deletions care/facility/migrations/0371_auto_20230706_2228.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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")
Expand All @@ -24,6 +25,7 @@ class Migration(migrations.Migration):
("facility", "0370_merge_20230705_1500"),
]
operations = [
BtreeGinExtension(),
migrations.AddField(
model_name="medibasemedicine",
name="search_vector",
Expand All @@ -35,23 +37,33 @@ 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="""
DROP TRIGGER IF EXISTS medibase_search_vector_trigger
ON facility_medibasemedicine;
""",
),
migrations.RunPython(
compute_search_vector, reverse_code=migrations.RunPython.noop
),
]

0 comments on commit e5adcde

Please sign in to comment.