db: add tsvector indexes on commentary, dmail, and wiki page text columns.

This commit is contained in:
evazion
2022-10-10 00:32:40 -05:00
parent 01d10a54f8
commit 4066ee52b1
3 changed files with 118 additions and 6 deletions

View File

@@ -191,11 +191,9 @@ module Searchable
# https://www.postgresql.org/docs/current/textsearch-controls.html#TEXTSEARCH-PARSING-DOCUMENTS
# https://www.postgresql.org/docs/current/textsearch-controls.html#TEXTSEARCH-PARSING-QUERIES
def where_tsvector_matches(columns, query)
tsvectors = Array.wrap(columns).map do |column|
to_tsvector("pg_catalog.english", arel_table[column])
end.reduce(:concat)
where("(#{tsvectors.to_sql}) @@ websearch_to_tsquery('pg_catalog.english', :query)", query: query)
Array.wrap(columns).map do |column|
where("(#{to_tsvector('english', arel_table[column]).to_sql}) @@ websearch_to_tsquery('pg_catalog.english', :query)", query: query)
end.reduce(:or)
end
# value: "5", ">5", "<5", ">=5", "<=5", "5..10", "5,6,7"

View File

@@ -0,0 +1,22 @@
class AddIndexesToArtistCommentaries < ActiveRecord::Migration[7.0]
disable_ddl_transaction!
def change
add_index :artist_commentaries, "to_tsvector('english', original_title)", using: :gin, name: "index_artist_commentaries_on_to_tsvector_original_title", algorithm: :concurrently
add_index :artist_commentaries, "to_tsvector('english', original_description)", using: :gin, name: "index_artist_commentaries_on_to_tsvector_original_description", algorithm: :concurrently
add_index :artist_commentaries, "to_tsvector('english', translated_title)", using: :gin, name: "index_artist_commentaries_on_to_tsvector_translated_title", algorithm: :concurrently
add_index :artist_commentaries, "to_tsvector('english', translated_description)", using: :gin, name: "index_artist_commentaries_on_to_tsvector_translated_description", algorithm: :concurrently
add_index :artist_commentaries, :created_at
add_index :artist_commentary_versions, "to_tsvector('english', original_title)", using: :gin, name: "index_artist_commentary_versions_on_original_title", algorithm: :concurrently
add_index :artist_commentary_versions, "to_tsvector('english', original_description)", using: :gin, name: "index_artist_commentary_versions_on_original_description", algorithm: :concurrently
add_index :artist_commentary_versions, "to_tsvector('english', translated_title)", using: :gin, name: "index_artist_commentary_versions_on_translated_title", algorithm: :concurrently
add_index :artist_commentary_versions, "to_tsvector('english', translated_description)", using: :gin, name: "index_artist_commentary_versions_on_translated_description", algorithm: :concurrently
add_index :dmails, "to_tsvector('english', title)", using: :gin, algorithm: :concurrently
add_index :dmails, "to_tsvector('english', body)", using: :gin, algorithm: :concurrently
add_index :wiki_pages, "to_tsvector('english', title)", using: :gin, algorithm: :concurrently
add_index :wiki_pages, "to_tsvector('english', body)", using: :gin, algorithm: :concurrently
end
end

View File

@@ -3448,6 +3448,13 @@ CREATE UNIQUE INDEX index_api_keys_on_key ON public.api_keys USING btree (key);
CREATE INDEX index_api_keys_on_user_id ON public.api_keys USING btree (user_id);
--
-- Name: index_artist_commentaries_on_created_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_artist_commentaries_on_created_at ON public.artist_commentaries USING btree (created_at);
--
-- Name: index_artist_commentaries_on_post_id; Type: INDEX; Schema: public; Owner: -
--
@@ -3455,6 +3462,34 @@ CREATE INDEX index_api_keys_on_user_id ON public.api_keys USING btree (user_id);
CREATE UNIQUE INDEX index_artist_commentaries_on_post_id ON public.artist_commentaries USING btree (post_id);
--
-- Name: index_artist_commentaries_on_to_tsvector_original_description; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_artist_commentaries_on_to_tsvector_original_description ON public.artist_commentaries USING gin (to_tsvector('english'::regconfig, original_description));
--
-- Name: index_artist_commentaries_on_to_tsvector_original_title; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_artist_commentaries_on_to_tsvector_original_title ON public.artist_commentaries USING gin (to_tsvector('english'::regconfig, original_title));
--
-- Name: index_artist_commentaries_on_to_tsvector_translated_description; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_artist_commentaries_on_to_tsvector_translated_description ON public.artist_commentaries USING gin (to_tsvector('english'::regconfig, translated_description));
--
-- Name: index_artist_commentaries_on_to_tsvector_translated_title; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_artist_commentaries_on_to_tsvector_translated_title ON public.artist_commentaries USING gin (to_tsvector('english'::regconfig, translated_title));
--
-- Name: index_artist_commentary_versions_on_created_at; Type: INDEX; Schema: public; Owner: -
--
@@ -3462,6 +3497,20 @@ CREATE UNIQUE INDEX index_artist_commentaries_on_post_id ON public.artist_commen
CREATE INDEX index_artist_commentary_versions_on_created_at ON public.artist_commentary_versions USING btree (created_at);
--
-- Name: index_artist_commentary_versions_on_original_description; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_artist_commentary_versions_on_original_description ON public.artist_commentary_versions USING gin (to_tsvector('english'::regconfig, original_description));
--
-- Name: index_artist_commentary_versions_on_original_title; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_artist_commentary_versions_on_original_title ON public.artist_commentary_versions USING gin (to_tsvector('english'::regconfig, original_title));
--
-- Name: index_artist_commentary_versions_on_post_id; Type: INDEX; Schema: public; Owner: -
--
@@ -3469,6 +3518,20 @@ CREATE INDEX index_artist_commentary_versions_on_created_at ON public.artist_com
CREATE INDEX index_artist_commentary_versions_on_post_id ON public.artist_commentary_versions USING btree (post_id);
--
-- Name: index_artist_commentary_versions_on_translated_description; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_artist_commentary_versions_on_translated_description ON public.artist_commentary_versions USING gin (to_tsvector('english'::regconfig, translated_description));
--
-- Name: index_artist_commentary_versions_on_translated_title; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_artist_commentary_versions_on_translated_title ON public.artist_commentary_versions USING gin (to_tsvector('english'::regconfig, translated_title));
--
-- Name: index_artist_commentary_versions_on_updater_id_and_created_at; Type: INDEX; Schema: public; Owner: -
--
@@ -3833,6 +3896,20 @@ CREATE INDEX index_dmails_on_owner_id ON public.dmails USING btree (owner_id);
CREATE INDEX index_dmails_on_title_and_body_tsvector ON public.dmails USING gin (((to_tsvector('english'::regconfig, title) || to_tsvector('english'::regconfig, body))));
--
-- Name: index_dmails_on_to_tsvector_english_body; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_dmails_on_to_tsvector_english_body ON public.dmails USING gin (to_tsvector('english'::regconfig, body));
--
-- Name: index_dmails_on_to_tsvector_english_title; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_dmails_on_to_tsvector_english_title ON public.dmails USING gin (to_tsvector('english'::regconfig, title));
--
-- Name: index_dtext_links_on_link_target; Type: INDEX; Schema: public; Owner: -
--
@@ -5759,6 +5836,20 @@ CREATE INDEX index_wiki_pages_on_title_and_body_tsvector ON public.wiki_pages US
CREATE INDEX index_wiki_pages_on_title_pattern ON public.wiki_pages USING btree (title text_pattern_ops);
--
-- Name: index_wiki_pages_on_to_tsvector_english_body; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_wiki_pages_on_to_tsvector_english_body ON public.wiki_pages USING gin (to_tsvector('english'::regconfig, body));
--
-- Name: index_wiki_pages_on_to_tsvector_english_title; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_wiki_pages_on_to_tsvector_english_title ON public.wiki_pages USING gin (to_tsvector('english'::regconfig, (title)::text));
--
-- Name: index_wiki_pages_on_updated_at; Type: INDEX; Schema: public; Owner: -
--
@@ -6785,6 +6876,7 @@ INSERT INTO "schema_migrations" (version) VALUES
('20220924092056'),
('20220925045236'),
('20220926050108'),
('20221003080342');
('20221003080342'),
('20221010035855');