class PgSearch::Features::Trigram

Public Class Methods

valid_options() click to toggle source
# File lib/pg_search/features/trigram.rb, line 6
def self.valid_options
  super + %i[threshold word_similarity]
end

Public Instance Methods

conditions() click to toggle source
# File lib/pg_search/features/trigram.rb, line 10
def conditions
  if options[:threshold]
    Arel::Nodes::Grouping.new(
      similarity.gteq(options[:threshold])
    )
  else
    Arel::Nodes::Grouping.new(
      Arel::Nodes::InfixOperation.new(
        infix_operator,
        normalized_query,
        normalized_document
      )
    )
  end
end
rank() click to toggle source
# File lib/pg_search/features/trigram.rb, line 26
def rank
  Arel::Nodes::Grouping.new(similarity)
end

Private Instance Methods

infix_operator() click to toggle source
# File lib/pg_search/features/trigram.rb, line 44
def infix_operator
  if word_similarity?
    "<%"
  else
    "%"
  end
end
normalized_document() click to toggle source
# File lib/pg_search/features/trigram.rb, line 62
def normalized_document
  Arel::Nodes::Grouping.new(Arel.sql(normalize(document)))
end
normalized_query() click to toggle source
# File lib/pg_search/features/trigram.rb, line 66
def normalized_query
  sanitized_query = connection.quote(query)
  Arel.sql(normalize(sanitized_query))
end
similarity() click to toggle source
# File lib/pg_search/features/trigram.rb, line 52
def similarity
  Arel::Nodes::NamedFunction.new(
    similarity_function,
    [
      normalized_query,
      normalized_document
    ]
  )
end
similarity_function() click to toggle source
# File lib/pg_search/features/trigram.rb, line 36
def similarity_function
  if word_similarity?
    "word_similarity"
  else
    "similarity"
  end
end
word_similarity?() click to toggle source
# File lib/pg_search/features/trigram.rb, line 32
def word_similarity?
  options[:word_similarity]
end