about summary refs log tree commit diff
path: root/db
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2017-03-17 20:47:38 +0100
committerEugen Rochko <eugen@zeonfederated.com>2017-03-17 20:48:14 +0100
commitad0d82d3cee27839371b3182b434d8e78092890a (patch)
tree1028396d66d956c2a1ed696e59a9e4c41c123fed /db
parent22f9399cc30b2fa41a2813ccf559b7fd05be251d (diff)
Make account search blazing fast and rank followers/followees higher in the results
Diffstat (limited to 'db')
-rw-r--r--db/migrate/20170317193015_add_search_index_to_accounts.rb9
-rw-r--r--db/schema.rb3
2 files changed, 11 insertions, 1 deletions
diff --git a/db/migrate/20170317193015_add_search_index_to_accounts.rb b/db/migrate/20170317193015_add_search_index_to_accounts.rb
new file mode 100644
index 000000000..14e174147
--- /dev/null
+++ b/db/migrate/20170317193015_add_search_index_to_accounts.rb
@@ -0,0 +1,9 @@
+class AddSearchIndexToAccounts < ActiveRecord::Migration[5.0]
+  def up
+    execute 'CREATE INDEX search_index ON accounts USING gin((setweight(to_tsvector(\'simple\', accounts.display_name), \'A\') || setweight(to_tsvector(\'simple\', accounts.username), \'B\') || setweight(to_tsvector(\'simple\', coalesce(accounts.domain, \'\')), \'C\')));'
+  end
+
+  def down
+    remove_index :accounts, name: :search_index
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 4ec85ef2b..c571fa3a8 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 20170304202101) do
+ActiveRecord::Schema.define(version: 20170317193015) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"
@@ -43,6 +43,7 @@ ActiveRecord::Schema.define(version: 20170304202101) do
     t.boolean  "silenced",                default: false, null: false
     t.boolean  "suspended",               default: false, null: false
     t.boolean  "locked",                  default: false, null: false
+    t.index "(((setweight(to_tsvector('simple'::regconfig, (display_name)::text), 'A'::\"char\") || setweight(to_tsvector('simple'::regconfig, (username)::text), 'B'::\"char\")) || setweight(to_tsvector('simple'::regconfig, (COALESCE(domain, ''::character varying))::text), 'C'::\"char\")))", name: "search_index", using: :gin
     t.index ["username", "domain"], name: "index_accounts_on_username_and_domain", unique: true, using: :btree
   end