Sha256: 116de2a54373c7b6905f8fd01d320e84b30877ac3f19a8df5e4379abed01a5b5

Contents?: true

Size: 1020 Bytes

Versions: 4

Compression:

Stored size: 1020 Bytes

Contents

# frozen_string_literal: true

module PgSearch
  module Features
    class Trigram < Feature
      def self.valid_options
        super + [:threshold]
      end

      def conditions
        if options[:threshold]
          Arel::Nodes::Grouping.new(
            similarity.gteq(options[:threshold])
          )
        else
          Arel::Nodes::Grouping.new(
            Arel::Nodes::InfixOperation.new("%", normalized_document, normalized_query)
          )
        end
      end

      def rank
        Arel::Nodes::Grouping.new(similarity)
      end

      private

      def similarity
        Arel::Nodes::NamedFunction.new(
          "similarity",
          [
            normalized_document,
            normalized_query
          ]
        )
      end

      def normalized_document
        Arel::Nodes::Grouping.new(Arel.sql(normalize(document)))
      end

      def normalized_query
        sanitized_query = connection.quote(query)
        Arel.sql(normalize(sanitized_query))
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
pg_search-2.1.7 lib/pg_search/features/trigram.rb
pg_search-2.1.6 lib/pg_search/features/trigram.rb
pg_search-2.1.5 lib/pg_search/features/trigram.rb
pg_search-2.1.4 lib/pg_search/features/trigram.rb