add search to notes
This commit is contained in:
		| @@ -1,17 +1,41 @@ | ||||
| defmodule Memex.Repo.Migrations.CreateNotes do | ||||
|   use Ecto.Migration | ||||
|  | ||||
|   def change do | ||||
|   def up do | ||||
|     create table(:notes, primary_key: false) do | ||||
|       add :id, :binary_id, primary_key: true | ||||
|       add :title, :string | ||||
|       add :content, :text | ||||
|       add :tags, {:array, :string} | ||||
|       add :tags, {:array, :citext} | ||||
|       add :visibility, :string | ||||
|  | ||||
|       add :user_id, references(:users, on_delete: :delete_all, type: :binary_id) | ||||
|  | ||||
|       timestamps() | ||||
|     end | ||||
|  | ||||
|     flush() | ||||
|  | ||||
|     execute """ | ||||
|     CREATE FUNCTION immutable_array_to_string(text[], text) | ||||
|       RETURNS text LANGUAGE sql IMMUTABLE as $$SELECT array_to_string($1, $2)$$ | ||||
|     """ | ||||
|  | ||||
|     execute """ | ||||
|     ALTER TABLE notes | ||||
|       ADD COLUMN search tsvector | ||||
|       GENERATED ALWAYS AS ( | ||||
|         setweight(to_tsvector('english', coalesce(title, '')), '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)") | ||||
|   end | ||||
|  | ||||
|   def down do | ||||
|     drop table(:notes) | ||||
|     execute("DROP FUNCTION immutable_array_to_string(text[], text)") | ||||
|   end | ||||
| end | ||||
|   | ||||
		Reference in New Issue
	
	Block a user