Merge pull request #3894 from r888888888/index-tag-prefix-search

Index tag prefix search
This commit is contained in:
Albert Yi
2018-09-12 15:03:40 -07:00
committed by GitHub
3 changed files with 16 additions and 7 deletions

View File

@@ -39,10 +39,6 @@ module TagAutocomplete
end
def search_correct(query, n=2)
if CurrentUser.id != 1
return []
end
if query.size <= 3
return []
end
@@ -78,9 +74,9 @@ module TagAutocomplete
n += 2
end
anchors = "^" + query.split("").map {|x| Regexp.escape(x)}.join(".*[#{PREFIX_BOUNDARIES}]")
regexp = "([a-z0-9])[a-z0-9']*($|[^a-z0-9']+)"
Tag
.where("name ~ ?", anchors)
.where('regexp_replace(name, ?, ?, ?) like ?', regexp, '\1', 'g', query.to_escaped_for_sql_like + '%')
.where("post_count > ?", min_post_count)
.where("post_count > 0")
.order("post_count desc")

View File

@@ -0,0 +1,5 @@
class AddPrefixesToTags < ActiveRecord::Migration[5.2]
def change
execute "CREATE INDEX index_tags_on_name_prefix ON tags USING gin (REGEXP_REPLACE(name, '([a-z0-9])[a-z0-9'']*($|[^a-z0-9'']+)', '\1', 'g') gin_trgm_ops) WHERE post_count > 0"
end
end

View File

@@ -7128,6 +7128,13 @@ CREATE UNIQUE INDEX index_tags_on_name ON public.tags USING btree (name);
CREATE INDEX index_tags_on_name_pattern ON public.tags USING btree (name text_pattern_ops);
--
-- Name: index_tags_on_name_prefix; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_tags_on_name_prefix ON public.tags USING gin (regexp_replace((name)::text, '([a-z0-9])[a-z0-9'']*($|[^a-z0-9'']+)'::text, ''::text, 'g'::text) public.gin_trgm_ops) WHERE (post_count > 0);
--
-- Name: index_tags_on_name_trgm; Type: INDEX; Schema: public; Owner: -
--
@@ -7524,6 +7531,7 @@ INSERT INTO "schema_migrations" (version) VALUES
('20180517190048'),
('20180518175154'),
('20180804203201'),
('20180816230604');
('20180816230604'),
('20180912185624');