Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Option to disable ranking #467

Open
rhymes opened this issue Apr 29, 2021 · 1 comment
Open

Option to disable ranking #467

rhymes opened this issue Apr 29, 2021 · 1 comment

Comments

@rhymes
Copy link

rhymes commented Apr 29, 2021

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:

def rank
(config.ranking_sql || ":tsearch").gsub(/:(\w*)/) do
feature_for(Regexp.last_match(1)).rank.to_sql
end
end

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
Copy link

fauno commented May 6, 2021

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants