From bb2f0ff795b9707e9f0ec1c34183648f16afe1c4 Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 30 Mar 2017 13:17:49 -0500 Subject: [PATCH] /pools: make autocomplete use index. `name ilike ?` doesn't use the index. Use `lower(name) like ?` instead. --- app/models/pool.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/models/pool.rb b/app/models/pool.rb index 37932262d..0b8023979 100644 --- a/app/models/pool.rb +++ b/app/models/pool.rb @@ -45,9 +45,9 @@ class Pool < ActiveRecord::Base end def name_matches(name) - name = name.tr(" ", "_") + name = normalize_name_for_search(name) name = "*#{name}*" unless name =~ /\*/ - where("name ilike ? escape E'\\\\'", name.to_escaped_for_sql_like) + where("lower(name) like ? escape E'\\\\'", name.to_escaped_for_sql_like) end def search(params) @@ -139,6 +139,10 @@ class Pool < ActiveRecord::Base name.gsub(/\s+/, "_") end + def self.normalize_name_for_search(name) + normalize_name(name).mb_chars.downcase + end + def self.normalize_post_ids(post_ids, unique) hoge = post_ids.scan(/\d+/) if unique