Casecommons / pg_search

pg_search builds ActiveRecord named scopes that take advantage of PostgreSQL’s full text search
http://www.casebook.net
MIT License
1.34k stars 371 forks source link

Option to disable ranking #467

Open rhymes opened 3 years ago

rhymes commented 3 years ago

There are cases when computing ranking between search results and the default order by ORDER BY rank DESC, id ASC is not required.

Although the default ordering can be disabled with .reorder(nil) the ranking computation itself can't be disabled.

I wish there was a an option for pg_search's ranked_by to disable it.

Something like: rank: false or ranked_by: false

If I'm not mistaken it should be possible by making this optional:

https://github.com/Casecommons/pg_search/blob/ea17b19309e8e489cb637309955c5c3117bdd612/lib/pg_search/scope_options.rb#L138-L142

so that if config.ranking_sql (which is the value of options[:ranked_by]) is explicitly set to false ranking can be skipped entirely.

I can try to transform this idea into a PR, let me know

fauno commented 3 years ago

fwiw i could apply my own ordering by monkey-patching PgSearch::ScopeOptions#apply from line 21:

https://github.com/Casecommons/pg_search/blob/master/lib/pg_search/scope_options.rb#L21-L23

module PgSearch
  ScopeOptions.class_eval do
    def apply(scope)
      scope = include_table_aliasing_for_rank(scope)
      rank_table_alias = scope.pg_search_rank_table_alias(include_counter: true)

      scope.joins(rank_join(rank_table_alias))
    end
  end
end