diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2017-03-17 20:47:38 +0100 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2017-03-17 20:48:14 +0100 |
commit | ad0d82d3cee27839371b3182b434d8e78092890a (patch) | |
tree | 1028396d66d956c2a1ed696e59a9e4c41c123fed /db | |
parent | 22f9399cc30b2fa41a2813ccf559b7fd05be251d (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.rb | 9 | ||||
-rw-r--r-- | db/schema.rb | 3 |
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 |