Feature #21815
Updated by Peter Amstutz 6 months ago
Inspired by #21737
This is what the full search indexes on (the operation is building a string with all the fields separated by spaces and then indexing on that):
CREATE INDEX collections_trgm_text_search_idx ON public.collections USING gin (((((((((((((((((((COALESCE)::text || ' '::text) || (COALESCE)::text) || ' '::text) || (COALESCE)::text) || ' '::text) || (COALESCE)::text) || ' '::text) || (COALESCE)::text) || ' '::text) || (COALESCE)::text) || ' '::text) || (COALESCE)::text) || ' '::text) || COALESCE::text, ''::text)) || ' '::text) || COALESCE)) public.gin_trgm_ops);
Looking at this, I think it would be much better if all uuid fields and the portable data hash were excluded.
The reasoning is that uuids and the PDH are a string of random alphanumeric characters, generating a lot of trigrams which become potential matches, but not actual matches.
Task:
# exclude @portable_data_hash@ and any field ending @_uuid@ from @full_text_searchable_columns@
# add a migration that recreates the trigram indexes for each table with the new @full_text_coalesce@