Text search now properly weighted and ranked
Default order by 'name' removed so that ranking can actually work.
This commit is contained in:
parent
3ffe975686
commit
e2671d2545
2 changed files with 23 additions and 4 deletions
|
|
@ -4,7 +4,12 @@ class Package < ActiveRecord::Base
|
||||||
include PgSearch
|
include PgSearch
|
||||||
# TODO: Make search weighted on users' rating
|
# TODO: Make search weighted on users' rating
|
||||||
pg_search_scope :general_search,
|
pg_search_scope :general_search,
|
||||||
:against => [:name, :description, :long_description],
|
# :against => [:name, :description, :long_description],
|
||||||
|
:against => [
|
||||||
|
[:name, 'A'],
|
||||||
|
[:description, 'B'],
|
||||||
|
[:long_description, 'C']
|
||||||
|
],
|
||||||
:using => {
|
:using => {
|
||||||
:tsearch => {:dictionary => "english"}
|
:tsearch => {:dictionary => "english"}
|
||||||
}
|
}
|
||||||
|
|
@ -14,9 +19,9 @@ class Package < ActiveRecord::Base
|
||||||
# screenshot files from disk.
|
# screenshot files from disk.
|
||||||
has_many :screenshots, :inverse_of=>:package, :dependent => :destroy
|
has_many :screenshots, :inverse_of=>:package, :dependent => :destroy
|
||||||
|
|
||||||
default_scope {
|
# default_scope {
|
||||||
order('name ASC')
|
# order('name ASC')
|
||||||
}
|
# }
|
||||||
|
|
||||||
# Return a query of all packages that have screenshots
|
# Return a query of all packages that have screenshots
|
||||||
def self.with_screenshots
|
def self.with_screenshots
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
# PostregreSQL text searches are now using weights. So the index has to reflect that.
|
||||||
|
class MakeFulltextSearchIndexWeighted < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
execute "drop index packages_fts"
|
||||||
|
|
||||||
|
execute "create index packages_fts on packages using gin((
|
||||||
|
setweight( to_tsvector('english', coalesce(\"packages\".\"name\"::text, '')), 'A' )
|
||||||
|
||
|
||||||
|
setweight( to_tsvector('english', coalesce(\"packages\".\"description\"::text, '')), 'B' )
|
||||||
|
||
|
||||||
|
setweight( to_tsvector('english', coalesce(\"packages\".\"long_description\"::text, '')), 'C' )
|
||||||
|
))"
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Add table
Add a link
Reference in a new issue