improve search
This commit is contained in:
		
							
								
								
									
										56
									
								
								priv/repo/migrations/20221128003712_fix_search.exs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								priv/repo/migrations/20221128003712_fix_search.exs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| 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 | ||||
		Reference in New Issue
	
	Block a user