57 lines
1.7 KiB
Elixir
57 lines
1.7 KiB
Elixir
|
defmodule Memex.Repo.Migrations.FixSearch do
|
||
|
use Ecto.Migration
|
||
|
|
||
|
def up do
|
||
|
reset_search_columns()
|
||
|
end
|
||
|
|
||
|
def down do
|
||
|
# no way to rollback this migration since the previous generated search columns were invalid
|
||
|
reset_search_columns()
|
||
|
end
|
||
|
|
||
|
defp reset_search_columns() do
|
||
|
alter table(:notes), do: remove(:search)
|
||
|
alter table(:contexts), do: remove(:search)
|
||
|
alter table(:pipelines), do: remove(:search)
|
||
|
|
||
|
flush()
|
||
|
|
||
|
execute """
|
||
|
ALTER TABLE notes
|
||
|
ADD COLUMN search tsvector
|
||
|
GENERATED ALWAYS AS (
|
||
|
setweight(to_tsvector('english', coalesce(slug, '')), 'A') ||
|
||
|
setweight(to_tsvector('english', coalesce(immutable_array_to_string(tags, ' '), '')), 'B') ||
|
||
|
setweight(to_tsvector('english', coalesce(content, '')), 'C')
|
||
|
) STORED
|
||
|
"""
|
||
|
|
||
|
execute("CREATE INDEX notes_trgm_idx ON notes USING GIN (search)")
|
||
|
|
||
|
execute """
|
||
|
ALTER TABLE contexts
|
||
|
ADD COLUMN search tsvector
|
||
|
GENERATED ALWAYS AS (
|
||
|
setweight(to_tsvector('english', coalesce(slug, '')), 'A') ||
|
||
|
setweight(to_tsvector('english', coalesce(immutable_array_to_string(tags, ' '), '')), 'B') ||
|
||
|
setweight(to_tsvector('english', coalesce(content, '')), 'C')
|
||
|
) STORED
|
||
|
"""
|
||
|
|
||
|
execute("CREATE INDEX contexts_trgm_idx ON contexts USING GIN (search)")
|
||
|
|
||
|
execute """
|
||
|
ALTER TABLE pipelines
|
||
|
ADD COLUMN search tsvector
|
||
|
GENERATED ALWAYS AS (
|
||
|
setweight(to_tsvector('english', coalesce(slug, '')), 'A') ||
|
||
|
setweight(to_tsvector('english', coalesce(immutable_array_to_string(tags, ' '), '')), 'B') ||
|
||
|
setweight(to_tsvector('english', coalesce(description, '')), 'C')
|
||
|
) STORED
|
||
|
"""
|
||
|
|
||
|
execute("CREATE INDEX pipelines_trgm_idx ON pipelines USING GIN (search)")
|
||
|
end
|
||
|
end
|