class Mincer::PgSearch::SearchEngines::Trigram
Private Class Methods
default_threshold()
click to toggle source
# File lib/mincer/processors/pg_search/search_engines/trigram.rb, line 46 def self.default_threshold if @@default_threshold.nil? grab_default_threshold else @@default_threshold end end
grab_default_threshold()
click to toggle source
# File lib/mincer/processors/pg_search/search_engines/trigram.rb, line 54 def self.grab_default_threshold @@default_threshold = ::Mincer.connection.execute('SELECT show_limit();').first['show_limit'].to_r end
Public Instance Methods
conditions()
click to toggle source
# File lib/mincer/processors/pg_search/search_engines/trigram.rb, line 7 def conditions return nil unless prepared_search_statements.any? arel_group do join_expressions(prepared_search_statements.map { |search_statement| document_for(search_statement) }, :or) end end
rank()
click to toggle source
# File lib/mincer/processors/pg_search/search_engines/trigram.rb, line 14 def rank return nil unless prepared_search_statements.any? arel_group do join_expressions(prepared_search_statements.map { |search_statement| rank_for(search_statement) }, :+) end end
Private Instance Methods
document_for(search_statement)
click to toggle source
# File lib/mincer/processors/pg_search/search_engines/trigram.rb, line 24 def document_for(search_statement) documents = search_statement.columns.map do |search_column| if self.class.default_threshold == search_statement.threshold arel_group(join_expressions([sanitize_column(search_column, search_statement.sanitizers(:document)), sanitize_string(search_statement.pattern, search_statement.sanitizers(:query))], '%')) else arel_group(similarity_function(search_column, search_statement).gteq(search_statement.threshold)) end end join_expressions(documents, :or) end
rank_for(search_statement)
click to toggle source
# File lib/mincer/processors/pg_search/search_engines/trigram.rb, line 35 def rank_for(search_statement) ranks = search_statement.columns.map do |search_column| similarity_function(search_column, search_statement) end join_expressions(ranks, :+) end
similarity_function(search_column, search_statement)
click to toggle source
# File lib/mincer/processors/pg_search/search_engines/trigram.rb, line 42 def similarity_function(search_column, search_statement) Arel::Nodes::NamedFunction.new('similarity', [sanitize_column(search_column, search_statement.sanitizers(:document)), sanitize_string(search_statement.pattern, search_statement.sanitizers(:query))]) end