From 7976323f7a823c751b7bfd631c2499a14f5c8536 Mon Sep 17 00:00:00 2001 From: evazion Date: Mon, 11 Oct 2021 02:58:08 -0500 Subject: [PATCH] wiki pages: change tsvector update trigger to not use test_parser. Change the wiki_pages tsvector_update_trigger to use `pg_catalog.english` instead of `public.danbooru`. This changes how wiki page text is parsed for full-text search to use the standard English parser instead of test_parser. This is to prepare for dropping test_parser. Using test_parser here was wrong anyway because it meant that punctuation wasn't removed from words when indexing wiki pages for full-text search. --- app/logical/concerns/searchable.rb | 6 +++--- app/models/wiki_page.rb | 2 +- ...11044400_change_ts_vector_trigger_on_wiki_pages.rb | 11 +++++++++++ db/structure.sql | 5 +++-- 4 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 db/migrate/20211011044400_change_ts_vector_trigger_on_wiki_pages.rb diff --git a/app/logical/concerns/searchable.rb b/app/logical/concerns/searchable.rb index 128780422..eb7c62183 100644 --- a/app/logical/concerns/searchable.rb +++ b/app/logical/concerns/searchable.rb @@ -194,7 +194,7 @@ module Searchable end end - def text_attribute_matches(attribute, value, index_column: nil, ts_config: "english") + def text_attribute_matches(attribute, value, index_column: nil) return all unless value.present? column = column_for_attribute(attribute) @@ -203,9 +203,9 @@ module Searchable if value =~ /\*/ where("lower(#{qualified_column}) LIKE :value ESCAPE E'\\\\'", value: value.mb_chars.downcase.to_escaped_for_sql_like) elsif index_column.present? - where("#{table_name}.#{index_column} @@ plainto_tsquery(:ts_config, :value)", ts_config: ts_config, value: value) + where("#{table_name}.#{index_column} @@ plainto_tsquery('english', :value)", value: value) else - where("to_tsvector(:ts_config, #{qualified_column}) @@ plainto_tsquery(:ts_config, :value)", ts_config: ts_config, value: value) + where("to_tsvector('english', #{qualified_column}) @@ plainto_tsquery('english', :value)", value: value) end end diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb index f880b15b9..10f7165e2 100644 --- a/app/models/wiki_page.rb +++ b/app/models/wiki_page.rb @@ -70,7 +70,7 @@ class WikiPage < ApplicationRecord def search(params = {}) q = search_attributes(params, :id, :created_at, :updated_at, :is_locked, :is_deleted, :body, :title, :other_names, :tag, :artist, :dtext_links) - q = q.text_attribute_matches(:body, params[:body_matches], index_column: :body_index, ts_config: "danbooru") + q = q.text_attribute_matches(:body, params[:body_matches], index_column: :body_index) if params[:title_normalize].present? q = q.where_like(:title, normalize_title(params[:title_normalize])) diff --git a/db/migrate/20211011044400_change_ts_vector_trigger_on_wiki_pages.rb b/db/migrate/20211011044400_change_ts_vector_trigger_on_wiki_pages.rb new file mode 100644 index 000000000..556053209 --- /dev/null +++ b/db/migrate/20211011044400_change_ts_vector_trigger_on_wiki_pages.rb @@ -0,0 +1,11 @@ +class ChangeTsVectorTriggerOnWikiPages < ActiveRecord::Migration[6.1] + def up + execute("DROP TRIGGER trigger_wiki_pages_on_update ON wiki_pages") + execute("CREATE TRIGGER trigger_wiki_pages_on_update BEFORE INSERT OR UPDATE ON public.wiki_pages FOR EACH ROW EXECUTE FUNCTION tsvector_update_trigger('body_index', 'pg_catalog.english', 'body', 'title')") + end + + def down + execute("DROP TRIGGER trigger_wiki_pages_on_update ON wiki_pages") + execute("CREATE TRIGGER trigger_wiki_pages_on_update BEFORE INSERT OR UPDATE ON public.wiki_pages FOR EACH ROW EXECUTE FUNCTION tsvector_update_trigger('body_index', 'public.danbooru', 'body', 'title')") + end +end diff --git a/db/structure.sql b/db/structure.sql index 768dd941a..e6204333a 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -4801,7 +4801,7 @@ CREATE TRIGGER trigger_posts_on_tag_index_update BEFORE INSERT OR UPDATE ON publ -- Name: wiki_pages trigger_wiki_pages_on_update; Type: TRIGGER; Schema: public; Owner: - -- -CREATE TRIGGER trigger_wiki_pages_on_update BEFORE INSERT OR UPDATE ON public.wiki_pages FOR EACH ROW EXECUTE FUNCTION tsvector_update_trigger('body_index', 'public.danbooru', 'body', 'title'); +CREATE TRIGGER trigger_wiki_pages_on_update BEFORE INSERT OR UPDATE ON public.wiki_pages FOR EACH ROW EXECUTE FUNCTION tsvector_update_trigger('body_index', 'pg_catalog.english', 'body', 'title'); -- @@ -5059,6 +5059,7 @@ INSERT INTO "schema_migrations" (version) VALUES ('20210926123414'), ('20210926125826'), ('20211008091234'), -('20211010181657'); +('20211010181657'), +('20211011044400');